当XMLDOMDocument自行保存时,如何让它包含XML声明,例如:
<?xml version="1.0" encoding="UTF-8" ?><?xml version="1.0" encoding="UTF-16" ?><?xml version="1.0" encoding="UCS-2" ?><?xml version="1.0" encoding="UCS-4" ?><?xml version="1.0" encoding="ISO-10646-UCS-2" ?><?xml version="1.0" encoding="UNICODE-1-1-UTF-8" ?><?xml version="1.0" encoding="UNICODE-2-0-UTF-16" ?><?xml version="1.0" encoding="UNICODE-2-0-UTF-8" ?><?xml version="1.0" encoding="US-ASCII" ?><?xml version="1.0" encoding="ISO-8859-1" ?><?xml version="1.0" encoding="WINDOWS-1250" ?>XMLDOMDomcument对象正在内存中创建(即xml不是从某些外部源加载的):
{
IXMLDOMDocument2 doc = new DOMDocument60();
//add nodes to the doc
...
doc.Save(saveTarget);
}
Run Code Online (Sandbox Code Playgroud)
没有xml声明,你只能获得body xml,例如:
<Customer>
...
</Customer>
Run Code Online (Sandbox Code Playgroud)
而不是完整的XML文档:
<?xml version="1.0" encoding="US-ASCII" ?>
<Customer>
...
</Customer>
Run Code Online (Sandbox Code Playgroud)
如何控制XMLDOMDocument在保存到流时将使用的编码?
您需要使用MXXMLWriter60,而不是直接保存它.对不起,我没有C#示例,但这里是VB.Net等价物.有关详细信息,请参阅IMXWriter.
' Create and load a DOMDocument object.
Dim xmlDoc As New DOMDocument60
xmlDoc.loadXML("<doc><one>test1</one><two>test2</two></doc>")
' Set properties on the XML writer - including BOM, XML declaration and encoding
Dim wrt As New MXXMLWriter60
wrt.byteOrderMark = True
wrt.omitXMLDeclaration = False
wrt.encoding = "US-ASCII"
wrt.indent = True
' Set the XML writer to the SAX content handler.
Dim rdr As New SAXXMLReader60
Set rdr.contentHandler = wrt
Set rdr.dtdHandler = wrt
Set rdr.errorHandler = wrt
rdr.putProperty "http://xml.org/sax/properties/lexical-handler", wrt
rdr.putProperty "http://xml.org/sax/properties/declaration-handler", wrt
' Now pass the DOM through the SAX handler, and it will call the writer
rdr.parse xmlDoc
' Let the writer do its thing
Dim iFileNo As Integer
iFileNo = FreeFile
Open App.Path + "\saved.xml" For Output As #iFileNo
Print #iFileNo, wrt.output
Close #iFileNo
Run Code Online (Sandbox Code Playgroud)