我想漂亮地打印一个 XDocument但内部留有空白 xml:space="preserve"
元素未受影响。
这段代码:
new XDocument(
new XElement("a",
new XElement("b",
new XElement("c"))))
.Save(Console.Out);
导致以下缩进输出(这正是我想要的):
<a>
<b>
<c />
</b>
</a>
但是,假设我需要在 <b>
中保留空白区域元素:
new XDocument(
new XElement("a",
new XElement("b",
new XAttribute(XNamespace.Xml + "space", "preserve"),
new XElement("c"))))
.Save(Console.Out);
在这种情况下,我得到以下输出:
<a>
<b xml:space="preserve">
<c />
</b>
</a>
这不好,因为在 xml:space="preserve"
中添加了缩进内部范围。这种情况下的预期输出是:
<a>
<b xml:space="preserve"><c /></b>
</a>
我很惊讶XDocument默认情况下不支持此功能。
是否有可能从 XDocument 中获得 pretty-print (缩进)输出? 并在内部保留空白 xml:space="preserve"
原样?
我知道一种选择是自己编写 XmlWriter负责这一点的实现,但我宁愿使用框架中的某些东西(如果可用)。
最佳答案
XmlWriter
中似乎存在错误,如 this 中所述 self 回答的问题。错误是:XmlWriter
将尊重 space:preserve
标签除非标有此属性的标签内没有空格 .如果没有空格 - 它可以(出于某种原因)添加一些。因为在内部 XDocument
也使用 XmlWriter
- 它显示了相同的行为。事实上,如果您手动添加 0 长度的空格,如下所示:
new XDocument(
new XElement("a",
new XElement("b",
new XAttribute(XNamespace.Xml + "space", "preserve"),
new XText(""),
new XElement("c"))))
.Save(Console.Out);
它将尊重空白保留标签并产生预期的输出。
关于c# - 使用缩进和 xml :space ="preserve" 保存 XDocument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37853350/