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 语法。在这种情况下,“..”应该返回找到的元素的父元素。

我用这个网站来测试这个: http: //ponderer.org/download/xpath/

如果你输入

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

在文本框中,它将以绿色突出显示包含 ul 元素(包含 li 元素)的 div。

这是你要找的吗?

于 2013-01-11T23:54:24.717 回答