Предел дерева элементов на xpath

Я использовал Element Tree некоторое время, и я люблю его из-за его простоты

Но я сомневаюсь в его реализации x пути

Это файл XML

<a> <b name="b1"></b> <b name="b2"><c/></b> <b name="b2"></b> <b name="b3"></b> </a> 

Код python

 import xml.etree.ElementTree as ET tree = ET.parse('test.xml') root = tree.getroot() root.findall("b[@name='b2' and c]") 

Программа показывает ошибку:

 invalid predicate 

Но если я использую

 root.findall("b[@name='b2']") or root.findall("b[c]") 

Оно работает,

2 Solutions collect form web for “Предел дерева элементов на xpath”

ElementTree обеспечивает ограниченную поддержку выражений XPath. Целью является поддержка небольшого подмножества сокращенного синтаксиса; полный механизм XPath выходит за рамки основной библиотеки.

(Ф. Лунд, поддержка XPath в ElementTree .)

Для реализации ElementTree, поддерживающей XPath (1.0), проверьте LXML :

 >>> s = """<a> <b name="b1"></b> <b name="b2"><c /></b> <b name="b2"></b> <b name="b3"></b> </a>""" >>> from lxml import etree >>> t = etree.fromstring(s) >>> t.xpath("b[@name='b2' and c]") [<Element b at 1340788>] 

Из документации ElementTree по поддержке XPath. :

ElementTree обеспечивает ограниченную поддержку выражений XPath. Целью является поддержка небольшого подмножества сокращенного синтаксиса; полный механизм XPath выходит за рамки основной библиотеки.

Вы только что обнаружили ограничение в реализации. Вместо этого вы можете использовать lxml ; он обеспечивает совместимый с ElementTree интерфейс с полной поддержкой XPath 1.0 .

  • извлечение только-родственного элемента в xpath
  • Как найти все элементы, содержащие слово «загрузить», используя Selenium x-path?
  • Как заставить XPath выбрать несколько элементов таблицы с одинаковыми атрибутами идентификатора?
  • Полнотекстовый поиск XML-данных с помощью Python: лучшие практики, плюсы и минусы
  • Xpath как запрос для вложенных словарей python
  • Как использовать регулярное выражение в lxml xpath?
  • Python - ElementTree - не может использовать абсолютный путь для элемента
  • Scrap grab div с несколькими классами?
  • Python - лучший язык программирования в мире.