Utilisation de Xpath et HtmlAgilityPack pour rechercher tous les éléments avec innertext contenant un ou plusieurs mots

html-agility-pack xpath

Question

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.

Réponse accepté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' .


Réponse populaire

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi