2009-10-12 73 views

回答

3

XmlDocument有一个属性PreserveWhitespace。如果将此设置为true,则将保留不重要的空白。

MSDN

编辑

如果我执行下面的代码,包括空格换行符被保留。 (这是真的,一个空间被插入<b/>之间)

XmlDocument doc = new XmlDocument(); 
    doc.PreserveWhitespace = true; 
    doc.LoadXml(
@"<a> 
    <b/> 
</a>"); 
    Console.WriteLine(doc.InnerXml); 

的输出是:

<a> 
    <b /> 
</a> 
+0

这并不能保留所有的空格。元素内部的空白(即元素本身,而不是其本体)不会保留 - ''将被转换为''。 – adrianbanks 2009-10-12 15:32:34

+0

谢谢。这和xml:space =“preserve”属性一样,并且更干净。但它仍然不能保留换行符。有没有办法保存休息? – bsh152s 2009-10-12 15:40:20

+0

@Brandon - 据我所见,换行符被保留。我已经添加了一个代码示例。 – 2009-10-12 17:06:42

0

无意义的空白将通常被丢弃或重新格式化。因此,除非XML文件在节点上使用xml:space="preserve"属性,否则应保留其确切的空格,否则按照XML规范更改空白是可以的。

+0

感谢。我在根节点上放置了xml:space =“preserve”属性,它保留了大部分的间距。但是,对于跨越多行的节点,它将它们放在一条线上。而且,我注意到以/>结尾的简单标签,它在结束标签前面插入一个空格。例如,对于节点“”,它将其更改为“”。这不是什么大不了的事情,但多线是。有没有办法保存多行?我关心的原因是我们可以轻松地比较源代码管理中的变化(因为我实际上是在修改XAML)。 – bsh152s 2009-10-12 15:28:32

+0

不,这不适用于普通的XML类,因为节点定义中的空白不是文档空白的一部分。 xml:space确保文档中的所有内容空白都保持不变,因为诸如两个标签之间没有文字的标签之间的空白也没有意义,任何可以改变(实际上,这可以让你很好地缩进文档而不改变它们的含义)。 – Lucero 2009-10-12 15:51:38

相关问题