Найти элемент по тексту с помощью XPath в ElementTree

Учитывая XML, как показано ниже:

<root> <element>A</element> <element>B</element> </root> 

Как я могу сопоставить элемент с контентом A, используя ElementTree и его поддержку XPath? благодаря

  • Scrapy и Xpath для извлечения данных из javascript-кода
  • Как избежать одиночной кавычки в xpath 1.0 в selenium для python
  • lxml xpath не игнорирует "& nbsp;"
  • xpath: манипуляция строк
  • Как я могу получить весь текст с сайта Scrapy?
  • Python Selenium: найти атрибуты объекта с помощью xpath
  • Lxml html xpath context
  • Получение всего видимого текста с веб-страницы с использованием Selenium
  • 2 Solutions collect form web for “Найти элемент по тексту с помощью XPath в ElementTree”

    AFAIK ElementTree не поддерживает XPath. Это изменилось?

    В любом случае, вы можете использовать lxml и следующее выражение XPath:

     import lxml.etree doc = lxml.etree.parse('t.xml') print doc.xpath('//element[text()="A"]')[0].text print doc.xpath('//element[text()="A"]')[0].tag 

    Результатом будет:

     A element 

    Если вы хотите использовать стандартную библиотеку ElementTree , а не lxml, вы можете использовать итерацию, чтобы найти все подэлементы с определенным текстовым значением. Например:

     import sys import xml.etree.ElementTree as etree s = """<root> <element>A</element> <element>B</element> </root>""" e = etree.fromstring(s) if sys.version_info < (2, 7): found = [element for element in e.getiterator() if element.text == 'A'] else: found = [element for element in e.iter() if element.text == 'A'] print found[0].text # This prints 'A', honestly! 

    Примечание. Возможно, вы захотите выполнить некоторую отрисовку text значения ваших элементов в понимании списка.

    Редактировать Это будет работать на любой глубине вашего дерева XML. Например,

     s = """<root> <element>A</element> <element><sub>A</sub></element> </root>""" found = [element for element in e.getiterator() if element.text == 'A'] for f in found: print f 

    распечатает

     <Element element at 7f20a882e3f8> <Element sub at 7f20a882e4d0> 
    Interesting Posts

    Как сделать элементы рисовать в то же время в python с помощью черепахи?

    Почему я не могу вызвать методы непосредственно для объектов int?

    Кто поделился моим сообщением в Facebook?

    Рисование окна вокруг сообщения

    В чем разница между аргументом буферизации open () и жестко запрограммированным размером буфера для чтения, используемым при итерации через файл?

    аналог os.walk в PyQt

    Перемещение электронной почты в GMail с помощью Python и imaplib

    Получить количество значений по столбцам – Pandas DataFrame

    Передача фигуры matplotlib в HTML (колбу)

    Невозможно обслуживать статические файлы, такие как css, js в django python

    Установка модуля lxml в python

    Поиск размера рабочей области (размер экрана меньше панели задач) с помощью GTK

    Получение запросов 401 в Twitter OAuth POST

    Почему OrderedDict назван в случае с верблюдом, а defaultdict – в нижнем регистре?

    Использовать Python по умолчанию вместо установки Anaconda при вызове с терминала

    Python - лучший язык программирования в мире.