Предположим, у меня есть следующий тест. xml:
<?xml version="1.0" encoding="UTF-8"?>
<test:myXML xmlns:test="http://com/my/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parent>
<FirstNode name="FirstNodeName"></FirstNode>
<Child1>Test from Child1</Child1>
<SecondNode name="SecondNodeName" type="SecondNodeType">
<Child2>
<GrandChild>Test from GrandChild</GrandChild>
</Child2>
</SecondNode>
</Parent>
</test:myXML>
Я бы хотел перебрать все дерево и получить путь к каждому узлу, включая атрибуты. Я могу перебирать дерево и извлекать путь к каждому узлу следующим образом:
from lxml import etree
xmlDoc = etree.parse("test.xml")
root = xmlDoc.getroot()
for node in xmlDoc.iter():
print("path: ", xmlDoc.getpath(node))
Как и ожидалось, это печатает:
path: /test:myXML
path: /test:myXML/Parent
path: /test:myXML/Parent/FirstNode
path: /test:myXML/Parent/Child1
path: /test:myXML/Parent/SecondNode
path: /test:myXML/Parent/SecondNode/Child2
path: /test:myXML/Parent/SecondNode/Child2/GrandChild
Однако, как я уже говорил, я Хотелось бы как-то распечатать атрибуты указанного узла и его родителей вместе с его путем. Например, если я хочу напечатать элемент «Child2», я бы хотел, чтобы атрибуты каждого из его родительских элементов также отображались. Что-то вроде:
path: /test:myXML/Parent/SecondNode{name="SecondNodeName" type="SecondNodeType"}/Child2
Возможно ли это? Я не слишком беспокоюсь о пространствах имен элемента root, если это облегчает задачу.