我正在嘗試使用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 + "')]]");