I use NewXMLDocument()
to produce an XML document of my data.
There is a SaveToXML()
method to save the document to an XML-formatted string variable.
The problem is that the XML string does not contain an "encoding"
attribute in the head tag.
But, if we save the XML document to a file with the SaveToFile()
method, the "encoding"
attribute will exist in it.
Here is my code:
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;
Is there a way to make the SaveToXML()
method add the "encoding"
attribute?
You need to use the overload method IXMLDocument.SaveToXML(var XML: UTF8String)
.
That will encode the xml to UTF-8 and add the encoding attribute in the xml header.
Declare your XmlString
as UTF8String
to get the desired result.
When you declare XmlString
as string
like you did, which is UTF-16 (Unicode) in Delphi 2009+, you actually call SaveToXML(var XML: DOMString)
. The DOMString
is defined as UnicodeString
.
By default, variables declared as type string
are UnicodeString
. The output xml is UTF-16 and the encoding attribute is omitted.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.