Разбирать искаженный XML

Я пытаюсь загрузить фрагмент (возможно) искаженного HTML в объект XMLDocument, но это не удается с XMLExceptions ... поскольку есть дополнительные открывающие / закрывающие теги и искаженные теги XML, такие как <img > вместо <img />

Как мне заставить XML анализировать все ошибки в данных? Есть ли какой-нибудь валидатор XML, который я могу применить перед синтаксическим анализом, чтобы исправить эти ошибки? Или обработка исключения будет анализировать все, что может быть проанализировано?


person Robin Rodricks    schedule 15.06.2009    source источник
comment
Я бы пошел на обработку исключений и попытался бы, если у вас есть представление о пороках развития ...   -  person abmv    schedule 15.06.2009
comment
Если он сформирован неправильно, он вызывает истерику (XMLException) и вообще не разбирает его! Дочерних узлов не существует.   -  person Robin Rodricks    schedule 15.06.2009


Ответы (6)


HTML Agility Pack будет анализировать html, а не xhtml, и это довольно снисходительно. Объектная модель будет вам знакома, если вы использовали XmlDocument.

person Marc Gravell    schedule 15.06.2009
comment
Это очень хорошо работало с XML, который содержал дерево узлов с отсутствующими конечными тегами. Спасибо за предложение! - person Cᴏʀʏ; 22.04.2013

Возможно, вы захотите проверить ответ на этот вопрос.

По сути, где-то между портом beautifulsoup .NET и пакетом гибкости HTML есть способ.

person annakata    schedule 15.06.2009

Маловероятно, что вы сможете создать XmlDocument с таким уровнем искаженной структуры. XmlDocument (насколько мне известно) требует, чтобы содержимое xml соответствовало правильному синтаксису вложенности и закрытия.

Однако вы подозреваете, что вместо этого можете проанализировать это с помощью XmlReader. Он по-прежнему может генерировать исключения, если встречаются некоторые вопиющие ошибки, но, согласно документам MSDN, он может, по крайней мере, раскрыть местоположение ошибок.

Если вы имеете дело только с HTML, есть HTML Agility Pack, что может служить вашим целям.

person LBushkin    schedule 15.06.2009

В зависимости от конкретных потребностей вы можете использовать HTML Tidy для очистки документа, а затем импортировать его с помощью объект XMLDocument.

person Mitchel Sellers    schedule 15.06.2009

То, что вы пытаетесь сделать, очень сложно. HTML нельзя проанализировать с помощью синтаксического анализатора XML, поскольку XML является строгим, а HTML - нет. Если бы этот HTML был совместим с XHTML (HTML как XML), то синтаксический анализатор XML без проблем анализировал бы HTML.

Если вы действительно хотите использовать синтаксический анализатор XML для HTML, возможно, вы захотите узнать, существуют ли какие-нибудь преобразователи HTML в XHTML.

Другими словами, мне еще предстоит встретить синтаксический анализатор XML, который обрабатывает искаженный XML ... они не предназначены для приема разметки, такой как HTML (тоже по уважительной причине :))

person Brian Genisio    schedule 15.06.2009

Вы не можете загрузить искаженный XML в XmlDocument.

Ознакомьтесь с Html Agility Pack на CodePlex

person Mitch Wheat    schedule 15.06.2009