Сохранение пробелов при загрузке или синтаксическом анализе XML
В этом разделе показан способ управления тем, как обрабатываются пробелы в LINQ to XML.
Типичный сценарий состоит в чтении XML с отступами, создании XML-дерева в памяти без текстовых узлов с пробелами (то есть без сохранения пробелов), выполнении определенных операций над XML и сохранении XML с отступами. При сериализации XML с форматированием сохраняются только значимые пробелы XML-дерева. Это поведение LINQ to XML по умолчанию.
Другой типичный сценарий заключается в чтении и изменении XML с уже существующими преднамеренными отступами. Эти отступы ни в коем случае изменять нельзя. Для этого в LINQ to XML можно сохранить пробелы при загрузке или синтаксическом анализе XML и отключить форматирование при сериализации XML.
В этом разделе описывается, как методы, заполняющие XML-деревья, обрабатывают пробелы. Сведения об управлении пробелами при сериализации XML-деревьев см. в разделе Сохранение пробелов при сериализации.
Поведение методов, заполняющих XML-деревья
Следующие методы в классах XElement и XDocument заполняют XML-дерево. XML-дерево можно заполнить из файла, объекта TextReader, объекта XmlReader или строки.
Если метод не принимает объект LoadOptions в качестве аргумента, то не будет сохранять незначащие пробелы.
В большинстве случаев, если метод принимает объект LoadOptions в качестве аргумента, позволяет сохранять незначащие пробелы в XML-дереве как текстовые узлы. Однако если метод загружает XML из объекта XmlReader, то объект XmlReader определяет, будут ли сохраняться пробелы или нет. Задание параметра PreserveWhitespace не оказывает никакого воздействия.
Если при использовании этих методов сохраняются незначащие пробелы, то вставляются в XML-дерево как узлы XText. Если же пробелы не сохраняются, то вставка текстовых узлов не происходит.
XML-дерево можно создать при помощи объекта XmlWriter. Узлы, которые записываются в XmlWriter, вставляются в дерево. Однако при построении XML-дерева при помощи этого метода сохраняются все методы, независимо от того, содержит ли узел пробел или нет, является ли пробел значащим или нет.