XML с пробелами как InnerText - PullRequest
3 голосов
/ 06 мая 2010

Я анализирую данные XML, в которых есть такие записи:

<item name="UserText" type_name="gh_string" type_code="10">      </item>

Я должен прочитать 6 пробелов в виде строки, но оба значения InnerText и InnerXml в System.Xml.XmlNode являются строками нулевой длины.

Можно ли как-нибудь получить эти пробельные данные в существующих файлах и что мне нужно сделать в будущем, чтобы предотвратить подобные ошибки?

Ответы [ 3 ]

4 голосов
/ 06 мая 2010

XML игнорирует этот пробел. Если вам нужно сохранить его, вы должны вставить атрибут xml:space="preserve" в ваши элементы. Нечто подобное, что, я думаю, сохранит ваши пробелы везде, где используется XML.

<item xml:space="preserve" name="UserText" type_name="gh_string" type_code="10">      </item>

Другой вариант, который будет работать с LINQ-to-XML, - это использовать параметр загрузки PreserveWhitespace. Пример:

XElement element = XElement.Parse(xml, LoadOptions.PreserveWhitespace);

Вы также должны иметь возможность заключать пробелы в тег CData, еще не проверял.

3 голосов
/ 26 января 2012

Если вы используете XMLDocument, установите XMLDocument.PreserveWhitespace = true перед вызовом Load.

См. http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.preservewhitespace.aspx

Это прекрасно работает для меня.

3 голосов
/ 06 мая 2010

Если вы читаете в XML с помощью XMLReader, просто используйте XMLReaderSettings с IgnoreWhitespace, установленным в false

XmlReader r = XmlReader.Create("file",new XmlReaderSettings{ IgnoreWhitespace=false;})
...