xdocument save保留标签内的空白区域

时间:2011-12-22 06:59:14

标签: c# linq-to-xml xmltextwriter

我在LINQ中使用XDocument编辑(插入)并保存xml文档。

XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace);
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting)
doc.Save之前的

sample.xml:

<ELEMENT ATTRIB1="attrib1"  ATTRIB2="attrib2" >
    value
</ELEMENT>
doc.Save

之后的

sample.xml

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2">
    value
</ELEMENT>

如您所见,在原始文档中ATTRIB1之后有一个空格,而在ATTRIB2之后有一个空格。 但是当我调用doc.save时,linq已经删除了这些空格。

如何保留标签内的空格?

2 个答案:

答案 0 :(得分:13)

我相信LoadOptions.PreserveWhitespaceSaveOptions.DisableFormatting只指示XDocument如何根据缩进和文本节点的内容处理空格。它仍然可以规范化属性等。

您可能希望在指定配置为执行所需操作的XmlWriter时使用重载,如果找不到与默认XmlTextWriter一起使用的配置,则可以始终创建自己的XmlWriter。

答案 1 :(得分:1)

这些是“不重要的空白”,并且在读取 XML时被删除。当您调用save时,没有关于属性之间间距的信息。 (请注意,严格来说,甚至可能不知道属性的顺序,因为它在XML中没有意义。)

如果要以XML标准不直接支持的方式读/写XML,则需要提供一些自定义处理。根据需要,自定义XmlWriter可能就足够了(例如,如果你想要用2个空格统一分开属性),或者你需要自己构建整个堆栈(读者/编写器/节点),如果你想真正保留原始XML中的信息(处理它)作为文本,而不是XML)。