Альтернативы XDocument - PullRequest
       1

Альтернативы XDocument

2 голосов
/ 30 апреля 2011

Привет, ребята, XDocument очень привередлив к одному из XML-фидов, которые мне нужно проанализировать, и продолжает выдавать мне ошибку

'=' - неожиданный токен.Ожидаемый токен - «;».Строка 1, позиция 576.

В основном XDocument плачет о свободном знаке "=" в документе XML.

У меня нет никакого контроля над исходным документом XML, поэтому мне нужно либо заставить XDocument игнорировать эту ошибку, либо использовать какой-то другой класс.Любые идеи на любой из них?

Ответы [ 3 ]

3 голосов
/ 30 апреля 2011

Если документ не является правильно сформированным XML (и я предполагаю, что у вас есть '& =' в документе или какой-либо другой строке, выглядящей как сущность), маловероятно, что другие парсеры XML будут более счастливыми с этим. Вы пытались загрузить документ, скажем, в IE, чтобы посмотреть, будет ли он там разбираться или вставлен в валидатор XML? Вы также можете просто попробовать XmlDocument.Load() и посмотреть, разберется ли он там, это следующий ближайший синтаксический анализатор XML (кроме XmlReader, который требует немного настройки).

1 голос
/ 30 апреля 2011

Это не будет хорошим XML, но если вам нужно просто загрузить плохой документ, тогда HTML Agility Pack - хороший инструмент.Он может упускать из виду многие вещи, которые делают HTML не XHTML и не похожим на XML, поэтому ваш ошибочный ввод XML, вероятно, будет также проанализирован.Объектная модель, которую он выражает, похожа на XmlDocument.например,

 HtmlDocument doc = new HtmlDocument();
 doc.Load("file.xml");

 foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"])
 {
    HtmlAttribute att = link["href"];
    att.Value = FixLink(att);
 }
 doc.Save("file.htm");

Или вы можете использовать Agility Pack для очистки XML, а затем передать его чистый вывод в настоящий анализатор XML для дальнейшей обработки.

Это быстрый иподвох , который я использовал для разовых задач.Это не обязательно рекомендуется для правильного решения.

Я бы порекомендовал, если позволяет время, каким-то образом отформатировать / исправить ошибочное содержимое XML (например, в виде строки или с помощью другого инструмента) перед передачей его в анализатор XML.

1 голос
/ 30 апреля 2011

Посмотрите на ответы на этот вопрос: Синтаксический анализ документа XML / XHTML, но игнорирование ошибок в C #

Лучший вариант, который я считаю, - это проанализировать его в try / catchblock, удалите нарушающий блок внутри блока catch и выполните повторный анализ.

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