Arvo Bowen
Arvo Bowen

Reputation: 4945

XMLDocument.Save adds return carriages to XML when elements are blank

I'm loading a XML Document that has some tags that have no innertext.

If I populate the innertext with some data then it works as needed (you get opening tag, innertext and closing tag all on one line) like the following...

<root>
  <element>value</element>
</root>

The problem arises with tags with no values. These SHOULD be displayed in the same way as above with the exception of no value of coarse, like the following...

<root>
  <element></element>
</root>

However, when the innertext has an empty string it adds a carriage return & line feed which is not what is expected! It ends up looking like the following...

<root>
  <element>
  </element>
</root>

This is my current code that yields the above results...

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\test.xml");

//Save the xml and then cleanup
xmlDoc.Save(@"C:\test.xml");

Upvotes: 15

Views: 13328

Answers (3)

Suveer Jacob
Suveer Jacob

Reputation: 893

Probably too late, but I referred to the solution given by Arvo Bowen. Arvo's solution is in C#, I wrote the same in Powershell Syntax

# $dest_file is the path to the destination file
$xml_dest = [XML] (Get-Content $dest_file)

#
#   Operations done on $xml_dest
#

$settings = new-object System.Xml.XmlWriterSettings
$settings.CloseOutput = $true
$settings.Indent = $true
$writer = [System.Xml.XmlWriter]::Create($dest_file, $settings)

$xml_dest.Save($writer)
$writer.Close()

It solved my two problems:

Upvotes: 1

Arvo Bowen
Arvo Bowen

Reputation: 4945

This fixed it for me...

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\test.xml");

//Save the xml and then cleanup
XmlWriterSettings settings = new XmlWriterSettings { Indent = true };
XmlWriter writer = XmlWriter.Create(@"C:\test.xml", settings);
xmlDoc.Save(writer);

Upvotes: 25

Related Questions