xdocument save сохранить белые пробелы внутри тегов - PullRequest
7 голосов
/ 22 декабря 2011

Я использую XDocument в LINQ для редактирования (вставки) и сохранения XML-документа.

XDocument doc = XDocument.Load("c:\\sample.xml", LoadOptions.PreserveWhitespace);
doc.Save("c:\\sample.xml",SaveOptions.DisableFormatting)

sample.xml перед документом. Сохранение:

<ELEMENT ATTRIB1="attrib1"  ATTRIB2="attrib2" >
    value
</ELEMENT>

sample.xml после документа.Save

<ELEMENT ATTRIB1="attrib1" ATTRIB2="attrib2">
    value
</ELEMENT>

Как видите, после ATTRIB1 есть двойной пробел и один пробел после ATTRIB2 в исходном документе.Но эти пробелы были удалены с помощью linq, когда я вызываю doc.save.

Как я могу сохранить пробелы внутри тега?

Ответы [ 2 ]

13 голосов
/ 22 декабря 2011

Я считаю, что LoadOptions.PreserveWhitespace и SaveOptions.DisableFormatting только инструктируют XDocument о том, как обрабатывать пробелы с точки зрения отступов и содержимого текстовых узлов.Он по-прежнему нормализует атрибуты и т. Д.

Возможно, вы захотите использовать перегрузку, когда вы указываете XmlWriter, который настроен на выполнение ваших действий, и если вы не можете найти конфигурацию, которая работает по умолчаниюXmlTextWriter, вы всегда можете создать свой собственный XmlWriter.

1 голос
/ 22 декабря 2011

Это "несущественные пробелы" и удаляются в момент чтения XML.К тому времени, когда вы вызываете функцию сохранения, информация о расстоянии между атрибутами отсутствует.(Обратите внимание, что, строго говоря, даже порядок атрибутов может быть неизвестен, так как он не имеет значения в XML).

Если вы хотите читать / записывать XML способом, который напрямую не поддерживается стандартом XML, вам необходимообеспечить некоторую пользовательскую обработку.В зависимости от требований может быть достаточно пользовательского XmlWriter (т. Е. Если вы хотите равномерно разделить атрибуты с двумя пробелами), или вам нужно будет собрать весь стек (считыватели / записи / узлы) самостоятельно, если вы действительно хотите сохранить информацию из исходного XML (обработав его)как текст, а не XML).

...