У меня хорошо сформированная 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.
programming questions site
http://stackoverflow.com
news
http://cnn.com
Должно быть что-то похожее на:
//a[text()='text_i_want_to_find']/@href
Слишком поздно для вас, но для кого-то еще с таким же вопросом ...
//a[contains(text(), 'programming')]/@href
Конечно, «программирование» может быть любым фрагментом текста.
//a[text()='programming quesions site']/@href
, который в основном идентифицирует узел привязки <a>, в котором есть нужный текст, и извлекает атрибут href.
<a>
href
Думайте о фразе в квадратных скобках как о выражении WHERE в SQL.
Таким образом, этот запрос говорит: «выберите атрибут« href »(@) тега« a », который появляется где угодно (//), но только там, где (в скобках) текстовое содержимое тега« a » равно «сайт вопросов программирования».
Для регистров без учета регистра используйте следующее:
//a[contains(translate(text(),'PROGRAMMING','programming'), 'programming')]/@href
переводит преобразование заглавных букв в ПРОГРАММИРОВАНИИ в программирование в нижнем регистре.
если вы используете html agility pack, используйте getattributeValue:
$doc2.DocumentNode.SelectNodes("//div[@class='className']/div[@class='InternalClass']/a[@class='InternalClass']").GetAttributeValue("href","")