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

标签 c# .net xml

我想漂亮地打印一个 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/

相关文章:

c# - 使用 MVC6 和新身份设置 UserRole 管理

.net - 如何在 Neo4jClient 中检索路径?

c# - LINQ OrderBy 子句 - 强制特定字符串始终位于顶部

.net - 为什么 Int32 是值类型?

javascript - 使用 AJAX 和 jQuery 填充 div

ios - iOS 中的 itunes JSON 请求返回一个 XML 对象

xml - 如何在生成 XML 时省略 GO 中的空字段

c# - 当 RedirectToAction 调用 View 时,mvc4 模型为 null

c# - log4net 无法创建日志文件,发布到服务器时

c# - Visual Studio 中的 MYSql 和 C#。如果数据库存在,如何返回 bool 值