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

时间:2011-03-21 00:55:49

标签: c# xml

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

<metadata territory="USA"></metadata>

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

  <metadata territory="USA">  
  </metadata>

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

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

将文档保持原始格式的ONLY方法是,如果XML文件在标题中包含'xml:space =“preserve”',但我将保留标题。

我唯一想要改变的是添加值。正如我所说的,只需加载和保存文档即可添加,因此如果您想测试,请尝试...

XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Temp\test.xml");
doc.Save(@"C:\Temp\test_02.xml");

5 个答案:

答案 0 :(得分:7)

刚刚进行了测试,通过设置XDocument属性,这可以同时使用XmlDocumentPreserveWhitespace

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");

<强>输入:

<foo>
  <metadata territory="USA"></metadata>
  <bar></bar>
  <baz>
  </baz>
</foo>

<强>输出:

<foo>
  <metadata territory="USA"></metadata>
  <bar></bar>
  <baz>
  </baz>
</foo>

答案 1 :(得分:1)

我和Richard Schneider在一起:我不相信这是可能的。一种可能的解决方案是获取输出XML文件并通过XML格式化程序运行它,该程序规范化XML文件的格式(如果找不到,则可以使用非托管XML dom编写一个)。

由于文件总是被标准化,所以它不会有太大的改变。

答案 2 :(得分:0)

我不认为这是可能的。加载XML文档时,会丢失格式信息;因此Save无法提供相同的结果。

答案 3 :(得分:0)

如果你正在使用xmlDocument,我可能会建议你使用XDocument(Framework 3.0 +)。

PreserveWhitespace将添加

<whatever> <...>
**</whatever>**

到每一行,而None只关闭它,如&lt; ... /&gt;。

我抬头看了5分钟如何保留那些空白区域,却找不到它。在de / reserialization中有一些遗漏的char(13)。

XDocument doc;
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read))
{
   //Alternative with .None
   doc = XDocument.Load(fs, LoadOptions.PreserveWhitespace);
}

并且重要的是..

 xmlDoc.Save("lala.xml", SaveOptions.None);

答案 4 :(得分:-1)

为什么不将文件另存为其他格式,然后在保存后将其重命名为XML。如果它仍然被错误地格式化,我会感到惊讶。不是很漂亮但很容易。