Utilizzo di Xpath e HtmlAgilityPack per trovare tutti gli elementi con testo interno contenente una parola o parole specifiche

html-agility-pack xpath

Domanda

Sto cercando di creare un motore di ricerca semplice utilizzando HtmlAgilityPack e Xpath con C # (.NET 4). Voglio trovare ogni nodo che contiene una parola chiave definita dall'utente, ma non riesco a ottenere l'XPath giusto. Per esempio:

<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>

Se la parola di ricerca specificata è "Mr T", desidero i seguenti nodi: <H1> , Il secondo <div> , <H2> e il secondo <p> . Ho provato numerose varianti di doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]"); ma mi sembra sempre di finire con ogni singolo nodo nell'intero DOM.

Qualsiasi suggerimento per farmi nella giusta direzione sarebbe molto apprezzato.

Risposta accettata

Usa :

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

Questo seleziona tutti gli elementi nel documento XML che hanno un figlio nodo di testo che contiene la stringa 'Mr T' .

Questo può anche essere scritto più breve come :

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

Seleziona il / i genitore / i di qualsiasi nodo di testo che contiene la stringa 'Mr T' .


Risposta popolare

Secondo Xpath, se vuoi trovare una parola chiave specifica devi seguire il formato ("parola chiave" è la parola che vuoi cercare):

// * [testo () [contiene (., 'parola chiave')]]

Devi seguire lo stesso formato di cui sopra in C #, keyword è la variabile stringa che chiami:

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


Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché