Как сопоставить содержимое элемента в XPath (lxml)?

Я хочу анализировать HTML с помощью lxml с помощью выражений XPath. Моя проблема заключается в совпадении содержимого тега:

Например, учитывая

<a href="http://something">Example</a> 

Я могу сопоставить атрибут href, используя

 .//a[@href='http://something'] 

но данное выражение

 .//a[.='Example'] 

или даже

 .//a[contains(.,'Example')] 

lxml выдает исключение «недопустимый предикат узла».

Что я делаю не так?

РЕДАКТИРОВАТЬ:

Пример кода:

 from lxml import etree from cStringIO import StringIO html = '<a href="http://something">Example</a>' parser = etree.HTMLParser() tree = etree.parse(StringIO(html), parser) print tree.find(".//a[text()='Example']").tag 

Ожидаемый результат: «a». Я получаю 'SyntaxError: недопустимый предикат узла'

One Solution collect form web for “Как сопоставить содержимое элемента в XPath (lxml)?”

Я бы постарался:

.//a[text()='Example']

используя метод xpath ():

 tree.xpath(".//a[text()='Example']")[0].tag 

Если вы хотите использовать iterfind (), findall (), find (), findtext (), имейте в виду, что расширенные функции, такие как сравнение значений и функции , недоступны в ElementPath .

lxml.etree поддерживает простой синтаксис пути методов find, findall и findtext в ElementTree и Element, как известно из исходной библиотеки ElementTree (ElementPath). В качестве расширения, специфичного для lxml, эти классы также предоставляют метод xpath (), который поддерживает выражения в полном синтаксисе XPath, а также пользовательские функции расширения.

  • Как сформулировать выражение Xpath для получения атрибута из дочернего узла?
  • Python Selenium Webdriver, чтобы проверить, не существует ли элемент, требуется время
  • Получение определенного значения атрибута с помощью XPath
  • Scrapy Not Returning Additonal Info из скребковой ссылки в элементе через запрос обратного вызова
  • Найти xth td с td содержит в одном и том же tr xpath python
  • Нужен общий xpath для следующего html-кода
  • Это ошибка xpath (lxml)?
  • Подстановочные пространства имен в lxml
  • Python - лучший язык программирования в мире.