xdocument save 保留标签内的空白

发布于 2024-12-22 19:17:36 字数 595 浏览 2 评论 0原文

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

如何保留标签内的空格?

I am using XDocument in LINQ to edit (insert) and save xml document.

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

sample.xml before doc.Save :

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

sample.xml after doc.Save

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

As you can see, there is double space after ATTRIB1 and a single space after ATTRIB2 in the original document.
But these spaces have been removed by linq when I call doc.save.

How can I preserve the whitespaces inside tag?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北渚 2024-12-29 19:17:36

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

您可能希望使用重载,指定一个配置为执行您想要的操作的 XmlWriter,如果您找不到与默认 XmlTextWriter 配合使用的配置,您可以随时创建您自己的 XmlWriter。

I believe that LoadOptions.PreserveWhitespace and SaveOptions.DisableFormatting only instruct XDocument on how to handle whitespace in terms of indentation and the content of text nodes. It would still normalize the attributes, etc.

You may wish to use an overload where you specify an XmlWriter that is configured to do what you want, and if you can't find a configuration that works with the default XmlTextWriter, you could always create your own XmlWriter.

街道布景 2024-12-29 19:17:36

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

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

These are "not significant whitespaces" and are removed at the moment of reading the XML. By the time you call save there is no information about spacing between attributes. (Note that strictly speaking even order of attributes may not be known as it has no significance in XML).

If you want to read/write XML in a way that is not directly supported by XML standard you need to provide some custom handling. Depending on requirements custom XmlWriter may be enough (i.e. if you want uniformly separate attributes with 2 whitespaces) or you'll need to build whole stack (readers/writers/nodes) yourself if you want to actually preserve information from original XML (treating it as text, not XML).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文