一个关于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 单元? [复制]