我在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已经删除了这些空格。
如何保留标签内的空格?
答案 0 :(得分:13)
我相信LoadOptions.PreserveWhitespace
和SaveOptions.DisableFormatting
只指示XDocument如何根据缩进和文本节点的内容处理空格。它仍然可以规范化属性等。
您可能希望在指定配置为执行所需操作的XmlWriter时使用重载,如果找不到与默认XmlTextWriter一起使用的配置,则可以始终创建自己的XmlWriter。
答案 1 :(得分:1)
这些是“不重要的空白”,并且在读取 XML时被删除。当您调用save时,没有关于属性之间间距的信息。 (请注意,严格来说,甚至可能不知道属性的顺序,因为它在XML中没有意义。)
如果要以XML标准不直接支持的方式读/写XML,则需要提供一些自定义处理。根据需要,自定义XmlWriter可能就足够了(例如,如果你想要用2个空格统一分开属性),或者你需要自己构建整个堆栈(读者/编写器/节点),如果你想真正保留原始XML中的信息(处理它)作为文本,而不是XML)。