Как найти URL ссылки по тексту ссылки в XPath? - PullRequest
85 голосов
/ 27 мая 2009

У меня хорошо сформированная XHTML страница. Я хочу найти целевой 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.

Ответы [ 6 ]

137 голосов
/ 27 мая 2009

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

//a[text()='text_i_want_to_find']/@href
71 голосов
/ 24 мая 2011

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

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

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

9 голосов
/ 27 мая 2009
//a[text()='programming quesions site']/@href 

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

6 голосов
/ 27 мая 2009

Думайте о фразе в квадратных скобках как о выражении WHERE в SQL.

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

4 голосов
/ 04 января 2013

Для регистров без учета регистра используйте следующее:

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

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

1 голос
/ 14 октября 2012

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

$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...