Encontrar un nodo (o cerca de él) usando XPath en HTML no bien formado

votos
3

Estoy usando XPath para ubicar un nodo (o algo parecido) en una plantilla que tiene un HTML no bien formado de unos 10 niveles de profundidad. (No, yo no escribí este HTML ... pero me han encargado que lo explore).

Parece que puedo recuperar un XPath para el elemento en cuestión usando el complemento XPartner para Firefox; sin embargo, solo me da la ubicación en el sitio en vivo, y no en la plantilla que me dieron. (La plantilla proviene de un lenguaje de scripting no estándar del lado del servidor, lee un lenguaje interno)

¿Hay alguna herramienta XPath que conozcas que sea particularmente buena para confundir a través de HTML no bien formado?

Publicado el 09/12/2008 a las 22:39
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
4

Las expresiones XPath no se pueden evaluar en comparación con un documento XML no bien formado , que es exactamente el caso descrito.

Es posible hacer esto en dos pasos encadenados, el primero de los cuales es convertir el HTML a XML bien formado y luego el segundo - para aplicar la expresión XPath.

Por lo tanto, la pregunta podría formularse de forma más precisa como "Cómo convertir HTML a XML para que las expresiones XPath puedan evaluarse en su contra".

Aquí hay dos buenas herramientas:

  1. TagSoup , un programa de fuente abierta , es una herramienta basada en Java y SAX, desarrollada por John Cowan . Este es un analizador compatible con SAX escrito en Java que, en lugar de analizar un XML bien formado o válido, analiza HTML tal como se lo encuentra en estado salvaje: pobre, desagradable y brutal, aunque a menudo lejos de ser corto. TagSoup está diseñado para personas que tienen que procesar este material utilizando una apariencia de diseño de aplicación racional. Al proporcionar una interfaz SAX, permite que las herramientas XML estándar se apliquen incluso al peor HTML. TagSoup también incluye un procesador de línea de comandos que lee archivos HTML y puede generar HTML limpio o XML bien formado que es una aproximación cercana a XHTML. Taggle es un puerto comercial de C ++ de TagSoup.

  2. SgmlReader es una herramienta desarrollada por Chris Lovett de Microsoft. SgmlReader es una API de XmlReader sobre cualquier documento SGML (incluido el soporte integrado para HTML). También se proporciona una utilidad de línea de comandos que genera el resultado XML bien formado. Descargue el archivo zip incluyendo el ejecutable independiente y el código fuente completo: SgmlReader.zip

  3. El analizador de HTML puro XSLT 2.0 escrito por David Carlisle . Leer su código sería un gran ejercicio de aprendizaje para todos nosotros.

De la descripción:

"d: htmlparse (cadena) d: htmlparse (cadena, espacio de nombres, modo html)

La forma de un argumento es equivalente a) d: htmlparse (string, ' http://ww.w3.org/1999/xhtml ', true ()))

Analiza la cadena como HTML y / o XML utilizando heurística incorporada para controlar la apertura implícita y el cierre de los elementos.

No tiene pleno conocimiento de HTML DTD, pero sí tiene una lista completa de elementos vacíos y una lista completa de definiciones de entidades. Se aceptan entidades HTML y referencias de caracteres hexadecimales y decimales. Nota Las entidades html se reconocen incluso si html-mode = false ().

Los nombres de elementos están en minúscula (si html-mode es true ()) y se colocan en el espacio de nombres especificado por el parámetro de espacio de nombres (que puede ser "" para denotar no-namespace a menos que la entrada tenga declaraciones explict de espacio de nombres, en cuyo caso se respetarán .

Los nombres de atributos están en minúsculas si html-mode = true () "

Lea una descripción más detallada aquí .

Respondida el 10/12/2008 a las 03:21
fuente por usuario

votos
0

XPath no funciona directamente con HTML. La interacción de XPath con su HTML está dictada por cualquier software / biblioteca que esté analizando el HTML en un árbol de renderizado. Esto puede ayudar a dirigir su búsqueda de manera adecuada.

Respondida el 09/12/2008 a las 23:40
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more