编辑XML文件,并保留空格和制表符
我有可能会包含看起来像下面的空节点的XML文档:编辑XML文件,并保留空格和制表符
<metadata territory="USA"></metadata>
简单地打开,然后使用XmlDocument的保存后,这一行看起来像:
<metadata territory="USA">
</metadata>
当我将PreserveWhitespace设置为true时,它将整个XML转换为1行,所以这不起作用。
这些XML文件需要尽可能保持当前的格式。我知道,从技术上讲,它们写入的方式并不重要,它们将以相同的方式读取,但我仍然需要保持相同的格式。我找不到一种方法来保持节点没有值为1行。有没有办法做到这一点?
保持原始格式的文档的唯一方法是,如果XML文件包含“xml:space =”在标题中保留“',但我要离开标题。
我想改变的唯一事情就是增加值。正如我所说的,只是加载和保存文档增加了这一点,所以如果你想测试,只是尝试...
XmlDocument doc = new XmlDocument();
doc.Load(@"C:\Temp\test.xml");
doc.Save(@"C:\Temp\test_02.xml");
为什么不将文件保存为不同的格式,那么它的后其重命名为XML被保存。如果它的格式不正确,我会感到惊讶。不漂亮,但很容易。
我不认为这是可能的。加载XML文档时,会丢失格式化信息;所以Save无法给出相同的结果。
我与Richard Schneider:我不相信这是可能的。一种可能的解决方案是获取输出的XML文件,并通过XML格式化程序运行它,以规范化XML文件的格式(如果找不到,可以使用非托管XML dom编写一个XML文件)。
由于该文件总是正常化,它不会有太大的改变。
+1永不放弃 – BinaryTox1n 2011-03-21 01:08:06
这是令人沮丧的考虑XmlDocument在其他方面的优秀程度。我会一直搞乱它,看看我能不能拿出一些东西。不幸的是,它可能不是一个'干净的'解决方案...... – Marvin 2011-03-21 15:17:44
据我所知,根本问题是XmlDocument是可变的 - 你可以很容易地修改解析树的方式,导致源文件和解析树之间的关系无法辨认。所以XML DOM抛弃了解析状态。 – 2011-03-21 18:53:24
只是做了测试,并通过设置PreserveWhitespace
属性同时使用XDocument
和XmlDocument
。
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>
如果您使用XmlDocument的,我可能会建议你使用的XDocument代替(框架3.0+)。
PreserveWhitespace将增加
<whatever> <...>
**</whatever>**
在每一行,而没有人会直接关闭它像< ... />。
我抬头看了5分钟,如何保留这些空白处,但找不到它。在de/reserialization中有一些省略字符(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);
仅供参考,这是没有必要把 “C#” 的称号 - 这就是标签是。 – 2011-03-21 18:56:41
你想解决什么问题?你为什么关心格式? – 2011-03-21 18:58:35
这是我在这里的第一篇文章,所以我没有意识到我不需要标题中的“C#”,直到太晚。我关心格式的原因是因为这是一个我最初没有创建的工作文件,当我们发送资源时,格式需要与创建时相同。 – Marvin 2011-03-22 06:07:47