在加载或分析 XML 时保留空白(LINQ to XML)

本文介绍了如何控制 LINQ to XML 的空白行为。

一种常见方案是,读取缩进式 XML,在内存中创建不含任何空白文本节点(即不保留空白)的 XML 树,对 XML 执行一些操作,再保存带缩进的 XML。 在序列化带格式的 XML 时,只保留 XML 树中有意义的空白。 这是 LINQ to XML 的默认行为。

另一个常见的情况是读取和修改已经有意缩进的 XML。 您可能不想以任何方式更改这种缩进。 若要在 LINQ to XML 中执行此操作,您要在加载或解析 XML 时保留空白,并在序列化 XML 时禁用格式设置。

本文介绍了填充 XML 树的方法的空白行为。 有关序列化 XML 树时如何控制空白的信息,请参阅 在序列化时保留空白

用于填充 XML 树的方法的行为

XElementXDocument 类中的以下方法用于填充 XML 树。 可以从文件、TextReaderXmlReader 或字符串填充 XML 树:

如果方法不采用 LoadOptions 作为参数,则该方法将不会保留无意义的空白。

在多数情况下,如果方法采用 LoadOptions 作为参数,则您可以选择保留无意义的空白作为 XML 树中的文本节点。 但如果方法从 XmlReader 中加载 XML,则 XmlReader 将确定是否保留空白。 设置 PreserveWhitespace 不会有影响。

使用这些方法时,如果保留空白,则会将无意义的空白插入到 XML 树中作为 XText 节点。 如果不保留空白,则不会插入文本节点。

您可以使用 XmlWriter 创建一个 XML 树。 写入到 XmlWriter 的节点会在树中进行填充。 但在使用此方法生成 XML 树时,不管节点是否为空白或是否为无意义的空白,都将保留所有节点。