Abrufen des Texts von einem Knoten mithilfe von HtmlAgilityPack

c# html-agility-pack xpath

Frage

Ich habe folgendes HTML:

<div class="top">
    <p>Blah.</p>
    I want <em>this</em> text.
</div>

Wie lautet die XPath-Notation, um die Zeichenfolge " I want <em>this</em> text. " zu extrahieren? EDIT: Ich möchte nicht unbedingt einen einzelnen XPath-Ausdruck die Zeichenfolge extrahieren. Das Auswählen mehrerer Knoten und das Iterieren über sie, um den Satz zu erzeugen, wäre ebenfalls großartig.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(myHtml);
doc.DocumentNode.SelectSingleNode("??????");

Akzeptierte Antwort

Was möchten Sie extrahieren, Knoten oder eine Zeichenfolge?

Wenn Sie Knoten möchten, "I want <em>this</em> text." ist ein XML-Fragment, das auf der obersten Ebene von zwei Textknoten und einem <em> -Element mit einem untergeordneten Textknoten besteht. Da es mehrere Knoten auf der obersten Ebene hat, müssen Sie SelectNodes("xpath expression a la @Alejandro") anstelle von SelectSingleNode() , um sie zu extrahieren.

Wenn Sie eine Zeichenfolge möchten, müssen Sie erneut SelectNodes (); und dann über die ausgewählten Knoten iterieren und die outerHTML von jedem verketten. Siehe hier für ein gutes Beispiel für etwas Ähnliches.

Es ist auch ein wenig unklar von Ihrem Beispiel, was XPath-Ausdruck Ihnen im Allgemeinen geben würde, was Sie wollen. ZB willst du alles nach dem ersten <p>...</p> unter <div class="top"> ? Oder möchten Sie den gesamten Text unter <div> außer allen <p> Elementen? Oder vielleicht noch etwas? Natürlich, wenn die XPath-Ausdrücke von @ Alejandro für dich funktionieren, ist es bereits ausreichend spezifiziert.


Beliebte Antwort

/div[@class='top']/p[.='Blah.']/following-sibling::node()

oder

/div[@class='top']/node()[not(self::p)]



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