Problèmes d'obtention de ChildNodes avec HTMLAgilityPack et XPath

c# html-agility-pack xpath

Question

J'essaie d'analyser le code HTML suivant. J'ai besoin d'obtenir le innertext de tous les liens sous une balise h4 avec la valeur "Titre".

<h4>Title</h4>
    <ul>
         <li>
             <a>One</a>
         </li>
         <li>
             <a>Two</a>
         </li>
         <li>
             <a>Three</a>
         </li>
    </ul>

Je peux obtenir l'élément h4 ok en utilisant le code suivant:

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]");

Le problème vient d'essayer d'obtenir les nœuds. J'ai essayé le code suivant mais aucun ne fonctionne:

var urls = member.SelectNodes(".//a");

foreach (var url in urls)
{
    Console.WriteLine(url.InnerText);
}

Réponse acceptée

D'après ce que je peux comprendre, je pense que cela ne fonctionne pas car le xpath que vous utilisez s'attend à ce que les nœuds a soient des enfants de votre nœud h4. Je n'ai pas testé cela et il manque peut-être une interprétation de vos besoins mais ...

var links = document.DocumentNode.SelectNodes("//h4[contains(text(),'Title')]/following-sibling::*[1]//a");

Cela obtiendrait tous les noeuds trouvés dans le premier frère du noeud h4. Donc, dans votre exemple HTML, il devrait obtenir tous les nœuds dans le nœud ul

J'espère que cela t'aides



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow