2009-05-27 63 views
75

我有一個結構良好的XHTML頁面。 我想要查找鏈接的文本時鏈接的目標網址。如何通過XPath鏈接文本找到鏈接URL?

<a href="http://stackoverflow.com">programming questions site</a> 
<a href="http://cnn.com">news</a> 

我想要一個XPath表達式使得如果給定programming questions site它會給http://stackoverflow.com,如果我給它news它會給http://cnn.com

回答

123

應該是類似的東西:

 
//a[text()='text_i_want_to_find']/@href 
+60

我會學習xpath嗎?當我看到一個查詢時,它顯而易見並且易於理解......但我永遠無法自己寫一個 – flybywire 2009-05-27 12:18:04

+3

@flybywire如果您閱讀了此免費的數據庫簡介課程,其中有關於XML和XPath的很好的部分。 – 2012-06-28 12:44:43

+2

而不是文本(),你可以使用「。=」,例如//a[.='註冊這裏'] – danpop 2016-02-03 14:31:47

8
//a[text()='programming quesions site']/@href 

基本上確定了有你想要的文字錨節點<a>,並提取href屬性。

6

將方括號中的短語想象爲SQL中的WHERE子句。所以這個查詢說:「選擇」a「標籤的」href「屬性(@),該標籤出現在任何地方(//),但只有其中的(a)標籤的文本內容(括號中的詞組)等於'編程問題網站'「。

+0

嗨,彼得,你有任何教程網站學習xpath查詢嗎? – 2015-02-20 02:05:32

62

太晚了你,但對於其他人同樣的問題...

//a[contains(text(), 'programming')]/@href 

當然,「編程」可以是任何文字片段。

+1

這一個更爲廣泛。好分享 – 2015-06-13 17:42:36

1

如果您正在使用的HTML敏捷包使用getattributeValue:

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","") 
3

對於不區分大小寫包含,使用以下命令:

//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href 

轉換大寫字母編程轉換爲小寫編程。

+0

請不要加「謝謝」作爲答案。投入一些時間在網站上,你將獲得足夠的[特權](http://stackoverflow.com/privileges)來滿足你喜歡的答案,這就是堆棧溢出方式表示感謝。 – Sklivvz 2013-06-30 12:07:43

+5

「謝謝」不是我的「答案」。從某種意義上來說,我認爲上面的答案是我改進的。 – Abdo 2013-07-01 12:22:52