Estoy raspando valores de páginas HTML usando XPath dentro de un programa java para obtener una etiqueta específica y ocasionalmente uso de expresiones regulares para limpiar los datos que recibo.Usando XPath Contiene contra HTML en Java
Después de algunas investigaciones, llegué a HTML Cleaner (http://htmlcleaner.sourceforge.net/) como la forma más confiable de analizar HTML sin procesar en un buen formato XML. HTML Cleaner, sin embargo, solo es compatible con XPath 1.0 y me parece que necesito funciones como 'contiene'. por ejemplo, en este pedazo de XML:
<div>
<td id='1234 foo 5678'>Hello</td>
</div>
Me gustaría ser capaz de obtener el texto 'Hola' con la siguiente XPath:
//div/td[contains(@id, 'foo')]/text()
¿Hay alguna manera de conseguir esta funcionalidad? Tengo varias ideas, pero preferiría no reinventar la rueda si yo no necesito:
- Si hay una manera de llamar evaluateXPath de Limpiador HTML y devolver un TagNode (que no he encontrado), I puede usar un serializador XML en el TagNode devuelto y encadenar XPaths para lograr la funcionalidad deseada.
- Podría usar HTML Cleaner para limpiar XML, serializarlo de nuevo en una cadena y usarlo con otra biblioteca XPath, pero no puedo encontrar un buen evaluador Javaath que funcione en una cadena.
- Uso de las funciones TagNode como getElementsByAttValue, pude recrear esencialmente evaluación XPath e insertar en el contiene funcionalidad utilizando String.contains
pregunta corta: ¿Hay alguna manera de utilizar XPath contiene el HTML dentro de una biblioteca existente de Java?
'contiene 'está en XPath 1.0: http://www.w3.org/TR/xpath/#function-contains –
Debería haber sido más sp ecific- HTML cleaner utiliza un subconjunto de XPath 1.0 que no permite contener. –
Mi opinión es que los desarrolladores de HTMLCleaner perdieron mucho tiempo escribiendo una implementación de XPath completamente innecesaria (y no conforme). No hay razón para usarlo alguna vez. Ver mi respuesta para un ejemplo completo. –