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

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个关于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的主要内容,如果未能解决你的问题,请参考以下文章

将组件添加到表单时如何自动添加 Delphi 单元? [复制]

原!关于java 单元测试的一些总结

Chrome读取XML一片空白,怎么处理

探讨下在Delphi里面进程之间的数据共享

求教个Delphi上关于操作XML的控件Nativexml的问题

分享一个Delphi跨平台Http库的封装,一个Delphi跨平台TCP库的封装