对于这个xml
<Departments orgID="123" name="xmllist">
<Department>
<orgID>124</orgID>
<name>A</name>
<type>type a</type>
<status>Active</status>
<Department>
<orgID>125</orgID>
<name>B</name>
<type>type b</type>
<status>Active</status>
<Department>
<orgID>126</orgID>
<name>C</name>
<type>type c</type>
<status>Active</status>
</Department>
</Department>
</Department>
<Department>
<orgID>109449</orgID>
<name>D</name>
<type>type d</type>
<status>Active</status>
</Department>
</Departments>
如何在 python 中使用 lxml
etree
获取节点的所有父节点.
How i can get all parents of a node using lxml
etree
in python.
预期输出:输入 orgid=126 ,它将返回所有喜欢的父母,
Expected output : Input orgid=126 , it will return all the parents like ,
{'A':124,'B':125,'C':126}
使用 lxml
和 XPath:
Using lxml
and XPath:
>>> s = '''
... <Departments orgID="123" name="xmllist">
... <Department>
... <orgID>124</orgID>
... <name>A</name>
... <type>type a</type>
... <status>Active</status>
... <Department>
... <orgID>125</orgID>
... <name>B</name>
... <type>type b</type>
... <status>Active</status>
... <Department>
... <orgID>126</orgID>
... <name>C</name>
... <type>type c</type>
... <status>Active</status>
... </Department>
... </Department>
... </Department>
... <Department>
... <orgID>109449</orgID>
... <name>D</name>
... <type>type d</type>
... <status>Active</status>
... </Department>
... </Departments>
... '''
<小时>
使用ancestor-or-self
轴,可以找到节点本身、父节点、祖父节点、...
Using ancestor-or-self
axis, you can find the node itself, parent, grandparent, ...
>>> 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节点的所有父节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!