8

我在 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 删除。

如何保留标签内的空格?

4

2 回答 2

15

我相信LoadOptions.PreserveWhitespace并且SaveOptions.DisableFormatting仅指示 XDocument 如何根据缩进和文本节点的内容处理空格。它仍然会规范化属性等。

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

于 2011-12-22T07:12:59.120 回答
1

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

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

于 2011-12-22T09:07:32.417 回答