编辑xml文件并保留空格和制表符

Mar*_*vin 2 c# xml

我有一个XML文档,其中包含如下所示的空节点:

<metadata territory="USA"></metadata>
Run Code Online (Sandbox Code Playgroud)

只需打开,然后使用XmlDocument保存,这一行看起来像:

  <metadata territory="USA">  
  </metadata>
Run Code Online (Sandbox Code Playgroud)

当我将PreserveWhitespace设置为true时,它将整个XML转换为1行,因此这不起作用.

这些XML文件需要尽可能保持当前格式.我知道,从技术上讲,它们的编写方式并不重要,它们将以相同的方式读取,但我仍需要保持相同的格式.我无法找到一种方法来保持节点没有值为1行.有没有办法做到这一点?

将文档保持原始格式的唯一方法是,如果XML文件在标题中包含'xml:space ="preserve"',但我将按原样保留标题.

我唯一想改变的是添加值.正如我所说,只需加载和保存文档就可以添加,所以如果你想测试一下,试试......

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Temp\test.xml");
doc.Save(@"C:\Temp\test_02.xml");
Run Code Online (Sandbox Code Playgroud)

Bro*_*ass 7

刚做了测试,这可以使用两者XDocumentXmlDocument通过设置PreserveWhitespace属性.

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.Load("test.xml");
xmlDoc.Save("testOut.xml");
..
XDocument xdoc = XDocument.Load("test.xml", LoadOptions.PreserveWhitespace);
xdoc.Save(@"testOut.xml");
Run Code Online (Sandbox Code Playgroud)

输入:

<foo>
  <metadata territory="USA"></metadata>
  <bar></bar>
  <baz>
  </baz>
</foo>
Run Code Online (Sandbox Code Playgroud)

输出:

<foo>
  <metadata territory="USA"></metadata>
  <bar></bar>
  <baz>
  </baz>
</foo>
Run Code Online (Sandbox Code Playgroud)