2014-03-27 26 views
1

我在下面的任務中使用html敏捷性。xpath查詢在網頁中搜索字符串

我在想什麼可以xpath查詢獲取所有包含字符串搜索詞的節點。它應該搜索元素的屬性和內聯文本。

<HTML> 
<BODY > 
    <H1>Mr T for president</H1> 
    <div class="test">We believe the new president should be</div> 
    <div id="test">the awsome Mr T</div> 
    <div> 
    <H2>Mr T replies:</H2> 
    <p>test paragraph</p> 
    <p class="test">for Mr T</p> 
    </div> 
    </BODY> 
</HTML> 

說我想讓所有的html元素都測試它們的屬性還是innertext?

+0

嗯... HTML不是XML。 XPath是用於XML的工具。 – spender

+0

我想將標籤數據或屬性修改爲包含test作爲搜索字符串的其他內容。 – sunder

+0

所以使用一個Html解析器。 HtmlAgilityPack很棒。用nuget抓住它。 – spender

回答

1

要找到包含在屬性值或文本節點給定令牌的所有元素節點,您可以使用此:

//*[text()[contains(., 'token')] or @*[contains(., 'token')]] 

要知道,當文字被其他標記打斷這將失敗例如在<p>foo<em>bar</em></p>中。

+0

因爲你錯過了一個小小的改動而工作]。我有另一個問題 - 我有這個詞作爲我的搜索字詞!@#$%^&(.txt但爲此結果爲空?爲什麼? – sunder

+0

謝謝你指出錯字,修正了這個錯誤。任何直接的問題與你的搜索令牌,但該符號可能是一個問題。它是在你的HTML輸入正確轉義? –

+0

的確是這樣,但我得到這個搜索令牌空的結果。這是因爲「!@#$%通過^&(.txt文件」,在這個搜索令牌是文件名。 – sunder

0

你可以試試這個XPath來對元素的內部文本或屬性值相匹配的關鍵字「測試」:

//*[contains(text(), 'test') or @*[contains(., 'test')]] 
+1

這將與多個所有元素失敗文本節點,因爲'contains($ string,$ needle)'只接受單個字符串作爲輸入。 –