我有一个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");
答案 0 :(得分:7)
刚刚进行了测试,通过设置XDocument
属性,这可以同时使用XmlDocument
和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");
<强>输入:强>
<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。如果它仍然被错误地格式化,我会感到惊讶。不是很漂亮但很容易。