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