0

特定のテキストが含まれる div の完全な InnerText を返したいと思います。

例: HTMLDocument (HTMLAgilityPack) で「hello world」を検索しており、「hello world」が見つかった div の完全な InnerText を返したいと考えています。

これは私が試したものです:

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

これにより、特定のテキストが見つかった HtmlNode が返されました。

ここで、textNode の最初の親 div を取得して、完全な InnerText を返したいと考えています。

前もって感謝します

4

2 に答える 2

2

これでいけると思います...

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

そして、これはおそらくさらに良い解決策です:

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

または、Linq-to-XML 表記を使用します。

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

または

        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;
于 2013-01-12T00:02:12.607 に答える
0

HTMLAgilityPack の経験はありませんが、これは XPath 構文のように見えます。その場合、「..」は見つかった要素の親を返す必要があります。

これをテストするために、この Web サイトを使用しました: http://ponderer.org/download/xpath/

入力すると

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

テキストボックスでは、ul 要素 (li 要素を含む) を含む div が緑色で強調表示されます。

これはあなたが探していたものですか?

于 2013-01-11T23:54:24.717 に答える