Suchen Sie das übergeordnete div eines bestimmten Textes in einem HTMLDocument

.net html-agility-pack

Frage

Ich möchte den kompletten InnerText eines Div zurückgeben, in dem sich ein bestimmter Text befindet.

Beispiel: Ich suche im HTMLDocument (HTMLAgilityPack) nach "Hallo Welt" und möchte den kompletten InnerText des divs zurückgeben, in dem "Hallo Welt" gefunden wurde.

Das habe ich ausprobiert:

HtmlNode textNode = doc.DocumentNode.SelectNodes("//text()[contains(., 'hello world')]/..")

Dies gab den HtmlNode zurück, wo der spezifische Text gefunden wurde.

Jetzt möchte ich das erste Eltern-div von textNode erhalten, um den kompletten InnerText zurückzugeben.

Danke im Voraus

Akzeptierte Antwort

Das würde es tun, denke ich ...

var nodes2 = doc.DocumentNode.SelectNodes("//div[contains(.//text(), 'Hello World')]");

Und das ist wahrscheinlich eine noch bessere Lösung:

var nodes3 = doc.DocumentNode.SelectNodes("//text()[contains(., 'Hello World')]/ancestor::div[1]");

oder verwenden Sie die Linq-to-XML-Notation:

        var nodes =
            doc.DocumentNode.Descendants("div")
               .Where(
                   div =>
                   div.DescendantsAndSelf("text()").Where(text => text.InnerHtml.Contains("Hello World")).Any())

Oder

        var nodes4 = from div in doc.DocumentNode.Descendants("div")
                     from text in div.DescendantsAndSelf("text()")
                     where text.InnerText.Contains("Hello World")
                     let firstParent = text.AncestorsAndSelf("div").First()
                     select firstParent;

Beliebte Antwort

Obwohl ich keine Erfahrung mit HTMLAgilityPack habe, sieht dies wie XPath-Syntax aus. In diesem Fall sollte ".." das übergeordnete Element des gefundenen Elements zurückgeben.

Ich habe diese Website zum Testen verwendet: http://ponderer.org/download/xpath/

Wenn du eingibst

//li[contains(., 'about')]/../..

Im Textfeld wird das div hervorgehoben, das das Element ul (das das Element li enthält) grün markiert.

Ist das wonach Sie gesucht haben?



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