Загрузка и чтение XML-файла завершается неудачно при его обработке - PullRequest
2 голосов
/ 14 декабря 2011

Я застрял на тонкой проблеме. Я пытаюсь создать консольное приложение C # 4.0 для чтения XML-файла.

Файл XML выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<?xml:stylesheet type='text/xsl' href='report.xsl' version='1.0'?>
...
<logs>
...
</logs>

А это мой код:

...
var root = XDocument.Load(xmlStream);

IEnumerable<XElement> address =
    from el in root.Descendants("formated-text")
    select el;
...

Это дает мне следующую ошибку в методе Load:

Символ ':', шестнадцатеричное значение 0x3A, не может быть включен в имя. Строка 2, позиция 6.

Изменение двоеточия во второй строке на '-' решает ошибку ... duh

Что я могу сделать в своем коде, чтобы прочитать исходный XML без необходимости сначала заменять это «глупое» двоеточие?

Спасибо!

Ответы [ 5 ]

3 голосов
/ 14 декабря 2011

Мне кажется, у вас просто неверный XML-документ.Двоеточие должно быть дефисом (согласно W3C ).Я сомневаюсь, что вы сможете сделать LINQ to XML для анализа недействительного документа - и вы не должны пытаться.Вместо этого вы должны исправить документ.

3 голосов
/ 14 декабря 2011

Двоеточие неверно, вы должны использовать тире

См. http://www.w3.org/Style/styling-XML.en.html

2 голосов
/ 14 декабря 2011

Ничего. Эта «глупая кишка» просто недопустима в этой позиции.

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

Ваш элемент таблицы XSL-стилей неверен.

Это должно быть:

<?xml-stylesheet type='text/xsl' href='report.xsl' version='1.0'?>

Попробуйте проверить ваш XML по любому количеству валидаторов .

Вы можете попробовать загрузить XML как строку и исправить эту проблему, используя синтаксический анализ строки, или вы можете прочитать исходный файл построчно и исправить любые вхождения xml: stylsheet перед сохранением его как текстового файла в этом пример , но было бы лучше получить тот, кто создал XML, чтобы исправить его в источнике.

0 голосов
/ 15 декабря 2011

Я обнаружил, что происхождение этих «искаженных» XML-файлов восходит к середине 1990-х годов ... да, такая старая система сегодня все еще используется и все еще производит этот вывод.Я могу жить с обходным путем в моем коде.

Спасибо, что нашли время, чтобы предоставить некоторые полезные подсказки о том, что происходит / происходит с этими элементами XML.

Мне нужно было подтверждение того, чтоСоздатель исходного XML допустил ошибку с этим двоеточием.

Я уже реализовал план B, пока не смогу убедить действительно большой отдел (не мой) внести изменения в их приложение ...: o(

План B состоит в том, чтобы сначала прочитать файл XML и заменить все вхождения «xml:». Затем передать этот исправленный файл в мой процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...