首页 > 代码库 > 一个关于Delphi XML处理单元的BUG

一个关于Delphi XML处理单元的BUG

使用delphi的XML处理单元 XMLDoc XMLIntf

在获取XML文本内容的时候, 高版本的Delphi会丢失编码描述....在D7上却是正常的, 下面是测试源码:

procedure TForm1.Button1Click(Sender: TObject);var  nXMLDoc: IXMLDocument;  i: Integer;  nMS: TMemoryStream;  nSS: TStringStream;  nStr: string;begin  nXMLDoc := TXMLDocument.Create(nil);  nXMLDoc.Active := True;  nXMLDoc.Encoding := ‘GB2312‘;  nXMLDoc.AddChild(‘test‘);  for i := 0 to 4 do    nXMLDoc.DocumentElement.AddChild(‘测试‘).NodeValue := i;  with Memo1 do  begin    Lines.Clear;    Lines.Add(‘---- nXMLDoc.XML.Text ----‘);    Lines.Add(‘‘);    Lines.Add(nXMLDoc.XML.Text);  end;  nMS := TMemoryStream.Create;  nXMLDoc.SaveToStream(nms);  nms.Position := 0;  with Memo2 do  begin    Lines.Clear;    Lines.LoadFromStream(nms);    Lines.Insert(0, ‘‘);    Lines.Insert(0, ‘---- nXMLDoc.SaveToStream ----‘);  end;  nMS.Free;  nXMLDoc.SaveToXML(nStr);  with Memo3 do  begin    Lines.Clear;    Lines.Add(‘---- nXMLDoc.SaveToXML ----‘);    Lines.Add(‘‘);    Lines.Add(nStr);  end;end;

下面是同样的代码分别在Delphi7 和Delphi2010的执行效果

对比可以发现, XML.Text和SaveToXML这2个方法, 在2010上, 输入以后 encoding="GB2312" 的编码信息会丢失

使用XE5的版本测试也一样会丢失, 只有在D7上是正常的

Delphi7结果

技术分享

Delph2010结果

技术分享

http://www.cnblogs.com/hs-kill/p/3829183.html

一个关于Delphi XML处理单元的BUG