使用Xpath和HtmlAgilityPack查找包含特定單詞或單詞的innertext的所有元素

html-agility-pack xpath

我正在嘗試使用HtmlAgilityPack和Xpath與C#(.NET 4)構建一個簡單的搜索引擎。我想找到包含用戶定義的搜索詞的每個節點,但我似乎無法使XPath正確。例如:

<HTML>
 <BODY>
  <H1>Mr T for president</H1>
   <div>We believe the new president should be</div>
   <div>the awsome Mr T</div>
   <div>
    <H2>Mr T replies:</H2>
     <p>I pity the fool who doesn't vote</p>
     <p>for Mr T</p>
   </div>
  </BODY>
</HTML>

如果指定的搜索字是“Mr T”,我想要以下節點: <H1> ,第二個<div><H2>和第二個<p> 。我嘗試了很多doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]");變種doc.DocumentNode.SelectNodes("//text()[contains(., "+ searchword +")]");但我總是似乎最終了解整個DOM中的每個節點。

任何暗示讓我走向正確的方向將非常感激。

一般承認的答案

使用

//*[text()[contains(., 'Mr T')]]

這將選擇XML文檔中具有text-node子元素的所有元素,該子元素包含字符串'Mr T'

這也可以寫得更短

//*[text()[contains(., 'Mr T')]]

這將選擇包含字符串'Mr T'的任何文本節點的父節點。


熱門答案

根據Xpath,如果要查找特定關鍵字,您需要遵循格式(“關鍵字”是您要搜索的單詞):

// * [text()[contains(。,'keyword')]]

你必須在C#中遵循與上面相同的格式, keyword是你調用的字符串變量:

doc.DocumentNode.SelectNodes("//*[text()[contains(., '" + keyword + "')]]");



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因