Probleme beim Abrufen von childNodes mit HTMLAgilityPack und XPath

c# html-agility-pack xpath

Frage

Ich versuche, den folgenden HTML-Code zu parsen. Ich muss den inneren Text aller Links unter einem h4-Tag mit dem Wert "Title" abrufen.

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

Ich kann das h4 Element mit dem folgenden Code in Ordnung bringen:

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

Das Problem kommt mit dem Versuch, die a-Knoten zu bekommen. Ich habe den folgenden Code ausprobiert, aber keiner funktioniert:

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

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

Akzeptierte Antwort

Von dem, was ich sammeln kann, denke ich, es funktioniert nicht, weil der XPath, den du verwendest, erwartet, dass die a-Knoten Kinder deines h4-Knotens sind, ich habe das nicht getestet und vermisse es vielleicht, deine Anforderungen zu interpretieren, aber ...

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

Dies würde alle a Knoten erhalten, die im ersten Geschwister des h4 Knotens gefunden werden. Also in Ihrem Beispiel HTML, sollte es alle Knoten innerhalb des Ul-Knoten bekommen

Hoffe das hilft



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum