对于这个xml
124
A
type a
Active
125
B
type b
Active
126
C
type c
Active
109449
D
type d
Active
我如何在python中使用lxml etree获取节点的所有父节点.
预期输出:输入orgid = 126,它将返回所有父母,如,
{'A':124,'B':125,'C':126}
解决方法:
使用lxml和XPath:
>>> s = '''
...
...
... 124
... A
... type a
... Active
...
... 125
... B
... type b
... Active
...
... 126
... C
... type c
... Active
...
...
...
...
... 109449
... D
... type d
... Active
...
...
... '''
使用祖先或自我轴,您可以找到节点本身,父,祖父母,…
>>> import lxml.etree as ET
>>> root = ET.fromstring(s)
>>> for target in root.xpath('.//Department/orgID[text()="126"]'):
... d = {
... dept.find('name').text: int(dept.find('orgID').text)
... for dept in target.xpath('ancestor-or-self::Department')
... }
... print(d)
...
{'A': 124, 'C': 126, 'B': 125}
标签:python,xml-parsing,python-2-7,xml,xml-etree