使用缩进和xml保存XDocument:space ="preserve"

Mår*_*röm 5 .net c# xml

我想要打印一个XDocument但是在xml:space="preserve"元素内部留下空白.

这个片段:

new XDocument(
    new XElement("a",
        new XElement("b",
            new XElement("c"))))
    .Save(Console.Out);
Run Code Online (Sandbox Code Playgroud)

导致以下缩进输出结果(这只是我想要的):

<a>
  <b>
    <c />
  </b>
</a>
Run Code Online (Sandbox Code Playgroud)

但是,假设我需要在<b>元素中保留空格:

new XDocument(
    new XElement("a",
        new XElement("b",
            new XAttribute(XNamespace.Xml + "space", "preserve"),
            new XElement("c"))))
    .Save(Console.Out);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我得到以下输出:

<a>
  <b xml:space="preserve">
    <c />
  </b>
</a>
Run Code Online (Sandbox Code Playgroud)

这是不好的,因为加入压痕xml:space="preserve"范围.在这种情况下的预期输出将是:

<a>
  <b xml:space="preserve"><c /></b>
</a>
Run Code Online (Sandbox Code Playgroud)

我很惊讶XDocument默认不支持这个.

是否有可能从XDocument 获得漂亮的打印(缩进)输出并保持xml:space="preserve"原样内的空白

我理解一个选项是编写我自己的XmlWriter实现来处理这个,但我宁愿使用框架中的东西(如果可用).

Evk*_*Evk 3

正如这个自我回答的问题XmlWriter中所描述的,似乎有一个错误。该错误是:除非标有此属性的标签内没有空格,否则将尊重标签。如果没有空格 - 它可以(出于某种原因)添加一些。因为内部也使用- 它显示出相同的行为。事实上,如果您手动添加 0 长度的空格,如下所示:XmlWriterspace:preserveXDocumentXmlWriter

new XDocument(
    new XElement("a",
        new XElement("b",
           new XAttribute(XNamespace.Xml + "space", "preserve"),
              new XText(""),
              new XElement("c"))))
.Save(Console.Out);
Run Code Online (Sandbox Code Playgroud)

它将尊重空白保留标签并产生预期的输出。