为什么用"IXMLDocument.SaveToXML"方法得到的字符串没有"encoding"属性?
Why is there no "encoding" attribute in a string got by "IXMLDocument.SaveToXML" method?
我使用 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"
属性?
您需要使用重载方法IXMLDocument.SaveToXML(var XML: UTF8String)
。
这会将 xml 编码为 UTF-8,并在 xml header.
中添加编码属性
将您的 XmlString
声明为 UTF8String
以获得所需的结果。
当您将 XmlString
声明为 string
时,即 Delphi 2009+ 中的 UTF-16 (Unicode),您实际上调用了 SaveToXML(var XML: DOMString)
。 DOMString
定义为 UnicodeString
.
默认情况下,声明为 string
类型的变量是 UnicodeString
。输出xml为UTF-16,省略编码属性
我使用 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"
属性?
您需要使用重载方法IXMLDocument.SaveToXML(var XML: UTF8String)
。
这会将 xml 编码为 UTF-8,并在 xml header.
中添加编码属性
将您的 XmlString
声明为 UTF8String
以获得所需的结果。
当您将 XmlString
声明为 string
时,即 Delphi 2009+ 中的 UTF-16 (Unicode),您实际上调用了 SaveToXML(var XML: DOMString)
。 DOMString
定义为 UnicodeString
.
默认情况下,声明为 string
类型的变量是 UnicodeString
。输出xml为UTF-16,省略编码属性