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