Verwenden von Xpath und HtmlAgilityPack zum Suchen aller Elemente mit Innertext, die ein bestimmtes Wort oder bestimmte Wörter enthalten

html-agility-pack xpath

Frage

Ich versuche, eine einfache Suchmaschine mit HtmlAgilityPack und Xpath mit C # (.NET 4) zu bauen. Ich möchte jeden Knoten finden, der ein benutzerdefiniertes Suchwort enthält, aber ich kann den XPath nicht richtig bekommen. Beispielsweise:

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

Wenn das spezifizierte Suchwort "Mr T" ist, möchte ich die folgenden Knoten haben: <H1> , das zweite <div> , <H2> und das zweite <p> . Ich habe verschiedene Varianten von doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]"); aber ich scheine immer mit jedem einzelnen Knoten im gesamten DOM zu enden.

Irgendwelche Hinweise, um mich in die richtige Richtung zu bringen, wären sehr willkommen.

Akzeptierte Antwort

Verwenden :

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

Dadurch werden alle Elemente im XML-Dokument ausgewählt, die einen untergeordneten Textknoten haben, der die Zeichenfolge 'Mr T' .

Dies kann auch kürzer geschrieben werden als :

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

Dadurch werden die übergeordneten Elemente eines Textknotens ausgewählt, der die Zeichenfolge 'Mr T' .


Beliebte Antwort

Laut Xpath, wenn Sie ein bestimmtes Keyword suchen möchten, müssen Sie dem Format folgen ("keyword" ist das Wort, das Sie suchen möchten):

// * [text () [enthält (., 'keyword')]]

Sie müssen dem gleichen Format wie oben in C # folgen, keyword ist die String-Variable, die Sie aufrufen:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum