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.
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'
.
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 + "')]]");