xdocument save preserve white space inside tags

Rocky picture Rocky · Dec 22, 2011 · Viewed 8.3k times · Source

I am using XDocument in LINQ to edit (insert) and save xml document.

XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace);
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting)

sample.xml before doc.Save :

<ELEMENT ATTRIB1="attrib1"  ATTRIB2="attrib2" >
    value
</ELEMENT>

sample.xml after doc.Save

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2">
    value
</ELEMENT>

As you can see, there is double space after ATTRIB1 and a single space after ATTRIB2 in the original document. But these spaces have been removed by linq when I call doc.save.

How can I preserve the whitespaces inside tag?

Answer

moribvndvs picture moribvndvs · Dec 22, 2011

I believe that LoadOptions.PreserveWhitespace and SaveOptions.DisableFormatting only instruct XDocument on how to handle whitespace in terms of indentation and the content of text nodes. It would still normalize the attributes, etc.

You may wish to use an overload where you specify an XmlWriter that is configured to do what you want, and if you can't find a configuration that works with the default XmlTextWriter, you could always create your own XmlWriter.