Как найти URL ссылки по ссылке с помощью XPath?

У меня есть хорошо сформированная страница XHTML. Я хочу найти целевой URL ссылки, когда у меня есть связанный текст.

Пример

<a href="#" onclick="location.href='http://stackoverflow.com'; return false;">programming questions site</a>
<a href="#" onclick="location.href='http://cnn.com'; return false;">news</a>

Я хочу выражение XPath, которое, если задано programming questions site, даст http://stackoverflow.com, и если я дам ему news он даст http://cnn.com.

Ответ 1

Должно быть что-то похожее на:

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

Ответ 2

Слишком поздно для вас, но для кого-то другого с тем же вопросом...

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

Конечно, "программирование" может быть любым фрагментом текста.

Ответ 3

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

который в основном идентифицирует якорь node <a>, который имеет нужный текст, и извлекает атрибут href.

Ответ 4

Подумайте о фразе в квадратных скобках в качестве предложения WHERE в SQL.

Итак, этот запрос говорит: "выберите атрибут" href "(@) тега" a ", который появляется где угодно (//), но только там, где (фраза в скобках) текстовое содержимое тега" a "равный" сайту вопросов программирования".

Ответ 5

В случае нечувствительности к регистру используйте следующее:

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

translate преобразует заглавные буквы в ПРОГРАММИРОВАНИИ для программирования в нижнем регистре.

Ответ 6

если вы используете html agility pack, используйте getattributeValue:

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