Question

I am using

XElement root = XElement.Load(filepath);

to load XML file, then finding things that I need.

IEnumerable<XElement> commands = from command in MyCommands
                                 where (string) command.Attribute("Number") == Number
                                 select command;

foreach (XElement command in commands)
{
     command.SetAttributeValue("Group", GroupFound);
}

When I am done with my changes, I save the file with the following code.

root.Save(filepath);

When file is saved, all the lines in my XML file are affected. Visual Studio aligns all the lines by default, but I need to save the original file format.

I cannot alter any part of the document, except the Group attribute values.

command.SetAttributeValue("Group") attributes.
Was it helpful?

Solution

You would need to do:

XElement root = XElement.Load(filepath, LoadOptions.PreserveWhitespace);

then do:

root.Save(filepath, SaveOptions.DisableFormatting);

This will preserve your original whitespace through the use of LoadOptions and SaveOptions.

OTHER TIPS

The information you're looking to preserve is lost to begin in the XDocument.

XDocument doesn't care if your elements had tabs or spaces on the line in front of them and if there are multiple whitespaces between attributes etc. If you want to rely on the Save() method you have to give up the idea you can preserve formatting.

To preserve formatting you'll need to add custom processing and figure out where precisely to make changes. Alternatively you may be able to adjust your save options to match the formatting you have if your XML is coming from a machine and not human edited

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top