我想返回div的完整InnerText,其中包含特定文本。
例如:我在HTMLDocument(HTMLAgilityPack)中搜索“hello world”,并希望返回找到“hello world”的div的完整InnerText。
这就是我的尝试:
HtmlNode textNode = doc.DocumentNode.SelectNodes("//text()[contains(., 'hello world')]/..")
这返回了找到特定文本的HtmlNode。
现在我想得到textNode的第一个父div来返回完整的InnerText。
提前致谢
答案 0 :(得分:1)
我会这样做......
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;
答案 1 :(得分:0)
虽然我没有HTMLAgilityPack的经验,但这看起来像XPath语法。在这种情况下,“..”应该返回找到的元素的父级。
我用这个网站测试了这个: http://ponderer.org/download/xpath/
如果您输入
//li[contains(., 'about')]/../..
在文本框中,它将以绿色突出显示包含ul元素(包含li元素)的div。
这是你在找什么?