How can I find the link URL by link text with XPath?

XmlXhtmlXpath

Xml Problem Overview


I have a well formed XHTML page. I want to find the destination URL of a link when I have the text that is linked.

Example

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

I want an XPath expression such that if given programming questions site it will give http://stackoverflow.com and if I give it news it will give http://cnn.com.

Xml Solutions


Solution 1 - Xml

Should be something similar to:

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

Solution 2 - Xml

Too late for you, but for anyone else with the same question...

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

Of course, 'programming' can be any text fragment.

Solution 3 - Xml

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

which basically identifies an anchor node <a> that has the text you want, and extracts the href attribute.

Solution 4 - Xml

Think of the phrase in the square brackets as a WHERE clause in SQL.

So this query says, "select the "href" attribute (@) of an "a" tag that appears anywhere (//), but only where (the bracketed phrase) the textual contents of the "a" tag is equal to 'programming questions site'".

Solution 5 - Xml

For case insensitive contains, use the following:

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

translate converts capital letters in PROGRAMMING to lower case programming.

Solution 6 - Xml

if you are using html agility pack use getattributeValue:

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionflybywireView Question on Stackoverflow
Solution 1 - XmlBadaroView Answer on Stackoverflow
Solution 2 - XmlMaDeuceView Answer on Stackoverflow
Solution 3 - XmlBrian AgnewView Answer on Stackoverflow
Solution 4 - XmlBaxter TidwellView Answer on Stackoverflow
Solution 5 - XmlAbdoView Answer on Stackoverflow
Solution 6 - XmlMiguel VazView Answer on Stackoverflow