Uso de Xpath y HtmlAgilityPack para encontrar todos los elementos con texto interno que contengan una palabra o palabras específicas

html-agility-pack xpath

Pregunta

Estoy tratando de construir un motor de búsqueda simple utilizando HtmlAgilityPack y Xpath con C # (.NET 4). Quiero encontrar todos los nodos que contengan una palabra de búsqueda definida por el usuario, pero parece que no puedo entender bien el XPath. Por ejemplo:

<HTML>
 <BODY>
  <H1>Mr T for president</H1>
   <div>We believe the new president should be</div>
   <div>the awsome Mr T</div>
   <div>
    <H2>Mr T replies:</H2>
     <p>I pity the fool who doesn't vote</p>
     <p>for Mr T</p>
   </div>
  </BODY>
</HTML>

Si la palabra clave especificada es "Mr T" quisiera los siguientes nodos: <H1> , el segundo <div> , <H2> y el segundo <p> . He probado numerosas variantes de doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]"); pero siempre parece que termino con cada nodo en todo el DOM.

Cualquier consejo para orientarme en la dirección correcta sería muy apreciado.

Respuesta aceptada

Uso :

//*[text()[contains(., 'Mr T')]]

Esto selecciona todos los elementos en el documento XML que tienen un elemento secundario de nodo de texto que contiene la cadena 'Mr T' .

Esto también se puede escribir más corto como :

//*[text()[contains(., 'Mr T')]]

Esto selecciona los padres de cualquier nodo de texto que contenga la cadena 'Mr T' .


Respuesta popular

Según Xpath, si desea buscar una palabra clave específica, debe seguir el formato ("palabra clave" es la palabra que le gusta buscar):

// * [texto () [contiene (., 'palabra clave')]]

Debe seguir el mismo formato que el anterior en C #, keyword es la variable de cadena que llama:

doc.DocumentNode.SelectNodes("//*[text()[contains(., '" + keyword + "')]]");



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué