当
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); }
如果没有xml声明,你只能得到正文xml,例如:
<Customer> ... </Customer>
而不是完整的XML文档:
<?xml version="1.0" encoding="US-ASCII" ?> <Customer> ... </Customer>
问题2
如何控制encoding the 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