Я использую XLinq (XML для Linq) для анализа XML-документа, и одна часть документа посвящена представлению форматированного текста и использует атрибут xml:space="preserve"
для сохранения пробелов в элементе форматированного текста.
Проблема, с которой я сталкиваюсь, заключается в том, что когда у меня есть элемент внутри расширенного текста, который содержит только подэлемент, но не содержит текста, XLinq переформатирует xml и помещает элемент в свою собственную строку.Это, конечно, приводит к созданию дополнительного пробела, который изменяет исходный контент.
Пример:
<rich-text xml:space="preserve">
<text-run><br/></text-run>
</rich-text>
приводит к:
<rich-text xml:space="preserve">
<text-run>
<br/>
</text-run>
</rich-text>
Если я добавлю пробел или любой другой текст перед <br/>
в исходном xml, примерно так
<rich-text xml:space="preserve">
<text-run> <br/></text-run>
</rich-text>
синтаксический анализатор не переформатирует xml
<rich-text xml:space="preserve">
<text-run> <br/></text-run>
</rich-text>
Как я могу предотвратить синтаксический анализатор xml от переформатирования моего элемента?
Является ли это переформатирование нормальным для анализа XMLили это просто нежелательный побочный эффект синтаксического анализатора XLinq?
РЕДАКТИРОВАТЬ: Я анализирую документ следующим образом:
using (var reader = System.Xml.XmlReader.Create(stream))
return XElement.Load(reader);
Я не использую какие-либо пользовательские XmlReaderSettings
или LoadOptions
Проблема возникает, когда я использую свойство .Value
в текстовом прогоне XElement
, чтобы получить текстовое значение элемента.Вместо получения \n
, который будет правильным выводом из исходного xml, я получу
\n \n
Обратите внимание на дополнительный пробел и разрыв строки из-за переформатирования!Переформатирование также можно наблюдать при проверке элемента в отладчике или при вызове .ToString()
.