python ElementTree находит дочерний элемент с определенным текстовым значением

Я долго искал. Есть ли способ напрямую получить дочерний элемент на основе текстового значения тега?

Например:

 <a>
   <b>
       <c>h</c>
   </b>
   <b>
       <c>j</c>
   </b>
</a>

И скажем, я хочу получить ребенка, у которого текстовое значение "c" == j. Есть ли способ сделать это, кроме как получить всех дочерних элементов «b», перебрать их и проверить значение c?


person bb2    schedule 15.11.2011    source источник


Ответы (1)


Если вы используете lxml, вы можете использовать выражение XPath //c[text()='j']

import lxml.etree as et

doc = '''
<a>
   <b>
       <c>h</c>
   </b>
   <b>
       <c>j</c>
   </b>
</a>
'''

tree = et.fromstring(doc)

tree.xpath("/a/b/c[text()='j']")

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

person Acorn    schedule 15.11.2011