Aide C # htmlagilitypack XPath

c# html-agility-pack xpath

Question

J'ai cette expression xpath qui ne fonctionne pas

"//div[child[0]::h4[text()[contains(.,'Dir')]]]/a"

Pour analyser ce code HTML:

<div class="txt"> 
      <h4 class="c1"> 
        Dir
      </h4> 
    <a  href="/name/myname/">Bob</a>
</div> 

J'essaie d'obtenir le noeud de liaison (a). Il existe d'autres balises HTML dans le document avec la même hiérarchie div / h4, la seule différence étant le innertext de la balise h4. Alors, comment puis-je vérifier que la classe div (1) a un noeud h4 avec le texte interne "dir" AND (2) obtenir le premier noeud de lien (a) Ne présumez pas que le lien est le prochain frère de h4.

Réponse acceptée

Ne pourriez-vous pas simplement utiliser ce xpath?

"//div[h4[contains(text(),'Dir')]]/a"

child[0] n'est pas un axe valide pour autant que je sache, donc il échoue.

Je ne sais pas si cela suffirait à satisfaire vos conditions sans voir un exemple HTML plus complet. Mais cela fonctionne certainement pour celui-ci.

S'il est possible qu'il y ait plusieurs éléments h4 dans la div et que vous souhaitiez uniquement vérifier le premier:

"//div[h4[1][contains(text(),'Dir')]]/a"

Réponse populaire

Comment puis-je vérifier que la classe div (1) a un sous-noeud h4 avec le texte interne "dir" AND (2) obtenir le premier noeud de lien (a)

utilisation:

"//div[@class='txt' and h4[contains(.,'Dir')]]/a[1]"


Related

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