2013-01-11 15 views
0

我想返回特定文本所在的div的完整InnerText。在HTMLDocument中查找特定文本的父div

例如:我在HTMLDocument(HTMLAgilityPack)中搜索「hello world」,並希望返回發現「hello world」的div的完整InnerText。

這是我的嘗試:

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

這回在特定的文本中發現的HtmlNode。

現在我想獲得textNode的第一個父div來返回完整的InnerText。

在此先感謝

回答

1

這將做到這一點,我認爲......

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

這可能是一個更好的解決方案:

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

,或者使用LINQ到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; 
+0

謝謝。我已經嘗試了第二種解決方案,它效果很好! – jimbo

0

雖然我不擁有這個HTMLAgilityPack經驗看起來像XPath語法。在這種情況下,「..」應該返回找到的元素的父代。

我用這個網站來測試這一點: http://ponderer.org/download/xpath/

如果您在

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

在文本框中鍵入它會突出顯示包含在綠色的UI元素(包含li元素)的DIV 。

這是你在找什麼?

相關問題