2009-05-27 111 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