2009-06-15 21 views
6

Estoy tratando de cargar una pieza de HTML (posiblemente) malformado en un objeto XMLDocument, pero falla con XMLExceptions ... ya que hay etiquetas adicionales de apertura/cierre y etiquetas XML mal formadas como <img > de <img />Parse malformado XML

¿Cómo obtengo el XML para analizar con todos los errores en los datos? ¿Hay algún validador XML que pueda aplicar antes del análisis para corregir estos errores? ¿O sería el manejo de la excepción analizar todo lo que se puede analizar?

+0

Iría por manejar las excepciones y probar si tiene una idea de las malformaciones ... – abmv

+0

Si está mal formado, produce una rabieta (XMLException) y no lo analiza en absoluto. No hay ningún ChildNodes. –

+0

http://stackoverflow.com/questions/28909882/dealing-with-malformed-xml – Sobrique

Respuesta

14

El HTML Agility Pack analizará html, en lugar de xhtml, y es bastante indulgente. El modelo de objetos será familiar si usó XmlDocument.

+1

Esto funcionó muy bien en XML que contenía un árbol de nodos con etiquetas de final faltantes. ¡Gracias por la sugerencia! –

0

Lo que estás tratando de hacer es muy difícil. HTML no se puede analizar utilizando un analizador XML, ya que XML es estricto y HTML no. Si ese HTML fuera compatible con XHTML (HTML como XML), entonces un analizador XML analizaría el HTML sin problemas.

Es posible que desee ver si hay convertidores HTML a XHTML por ahí, si realmente desea utilizar un analizador XML para HTML.

En otras palabras, me he encontrado con un analizador XML que maneja XML malformado ... ellos no están diseñados para aceptar marcado suelto como HTML (por una buena razón, también :))

2

Es posible que desee comprobar la respuesta al this question.

Básicamente en algún lugar entre un puerto .NET de beautifulsoup y el paquete de agilidad HTML hay una manera.

1

Es poco probable que pueda compilar un XmlDocument que tenga este nivel de estructura mal formada. XmlDocument (que yo sepa) requiere que el contenido xml se adhiera a la sintaxis correcta de anidamiento y cierre.

Sin embargo, sospecha que podría analizar esto con un XmlReader en su lugar. Todavía puede arrojar excepciones si se encuentran ciertos errores atroces, pero de acuerdo con los documentos de MSDN, al menos puede revelar la ubicación de los errores.

Si solo está tratando con HTML, existe el HTML Agility Pack, que puede servir para sus propósitos.

0

No puede cargar XML mal formado en un XmlDocument.

Mira la Html Agility Pack en CodePlex

1

Dependiendo ont necesidades específicas, usted podría ser capaz de utilizar HTML Tidy a la limpieza del documento, a continuación, importarlos utilizando el objeto XMLDocument.