Как я могу получить элемент из файла XML с атрибутом, имеющим конкретное значение

XML-файл:

<Node name="node1"> <Node name="node2"> <Node name="node3"> <Node name="node4"> ... </Node> </Node> </Node> </Node> 

Как выбрать или получить объект «Узла» с атрибутом «name» со значением «node3» (или любым конкретным значением)?

В настоящее время я использую xml.etree.ElementTree

 from xml.etree import ElementTree document = ElementTree.parse( 'filename.xml' ) nodes = document.find( 'Node') for node in nodes: if node.attribute('name') == "node3": print("found") break 

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

Я использую python 2.7

С помощью lxml вы можете использовать XPath:

 In [1]: from lxml.etree import parse In [2]: tree = parse('nodes.xml') In [3]: tree.xpath('//Node[@name="node3"]') Out[3]: [<Element Node at 0x180ec30>] 

С несколькими предикатами:

 In [4]: tree.xpath('//Node[@name="node3"][@value="value3"]') Out[4]: [<Element Node at 0x155d1e0>]