为什么通过“ IXMLDocument.SaveToXML”方法获取的字符串中没有“ encoding”属性?

时间:2019-05-22 13:41:42

标签: xml delphi delphi-10.1-berlin

我使用NewXMLDocument()生成数据的XML文档。

有一种SaveToXML()方法可以将文档保存为XML格式的字符串变量。

问题是XML字符串的head标记中不包含"encoding"属性。

但是,如果我们使用SaveToFile()方法将XML文档保存到文件中,则其中将存在"encoding"属性。

这是我的代码:

var
  XML: IXMLDocument;
  RootNode, CurNode: IXMLNode;
  XmlString: string;
begin
  XML := NewXMLDocument;
  XML.Encoding := 'utf-8';
  XML.Options := [doNodeAutoIndent];
  RootNode := XML.AddChild('XML');
  CurNode := RootNode.AddChild('List');
  CurNode := CertList.AddChild('Item');
  CurNode.Text := 'bla-bla-bla';
  ...

  XMl.SaveToXML(XmlString);  // <<--- no "encoding" attribute here

  XMl.SaveToFile('my-list.xml');
  XMl := nil;
end;

是否有一种方法可以使SaveToXML()方法添加"encoding"属性?

1 个答案:

答案 0 :(得分:2)

您需要使用重载方法IXMLDocument.SaveToXML(var XML: UTF8String)
这样会将xml编码为UTF-8,并在xml标头中添加encoding属性。
将您的XmlString声明为UTF8String,以获得所需的结果。

当像您一样将XmlString声明为string时(在Delphi 2009+中是UTF-16(Unicode)),您实际上会调用SaveToXML(var XML: DOMString)DOMString被定义为UnicodeString
默认情况下,声明为类型string的变量为UnicodeString。输出的xml为UTF-16,并且省略了encoding属性。