How to make XMLDOMDocument include the XML Declaration?

dom, msxml, xml

Solution

You need to use a MXXMLWriter60, instead of saving it directly. Sorry I don't have a C# example, but here is the VB.Net equivalent. See IMXWriter for details.

' 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

Problem

When an XMLDOMDocument saves itself, how can i get it to include the XML Declaration, e.g.: - `<?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" ?>` The XMLDOMDomcument object is being created in memory (i.e. the xml is not being loaded from some outside source): ``` { IXMLDOMDocument2 doc = new DOMDocument60(); //add nodes to the doc ... doc.Save(saveTarget); } ``` Without the xml declaration you only get the body xml, e.g.: ``` <Customer> ... </Customer> ``` rather than the full XML document: ``` <?xml version="1.0" encoding="US-ASCII" ?> <Customer> ... </Customer> ``` Question 2 How can i control the encoding the XMLDOMDocument will use when it saves to a stream?

Original source

Related problems