J'essaye de construire un moteur de recherche simple en utilisant HtmlAgilityPack et Xpath avec C # (.NET 4). Je veux trouver chaque nœud contenant un mot-clé défini par l'utilisateur, mais je n'arrive pas à obtenir le droit XPath. Par exemple:
<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 le mot de recherche spécifié est "Mr T", je voudrais les nœuds suivants: <H1>
, le deuxième <div>
, <H2>
et le deuxième <p>
. J'ai essayé de nombreuses variantes de doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]");
mais je semble toujours me retrouver avec chaque nœud de tout le DOM.
Toute suggestion pour me mettre dans la bonne direction serait très appréciée.
Utiliser :
//*[text()[contains(., 'Mr T')]]
Ceci sélectionne tous les éléments du document XML ayant un enfant de noeud de texte contenant la chaîne 'Mr T'
.
Cela peut aussi être écrit plus court comme :
//text()[contains(., 'Mr T')]/..
Ceci sélectionne le (s) parent (s) de tout nœud de texte contenant la chaîne 'Mr T'
.
Selon Xpath, si vous souhaitez trouver un mot clé spécifique, vous devez suivre le format ("mot clé" est le mot que vous souhaitez rechercher):
// * [text () [contient (., 'mot clé')]]
Vous devez suivre le même format que ci-dessus en C #, keyword
- keyword
est la variable chaîne que vous appelez:
doc.DocumentNode.SelectNodes("//*[text()[contains(., '" + keyword + "')]]");