我使用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"
属性?
答案 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属性。