我有多棵树,每个树结构看起来都不同。
[我要实现的目标是找到所有带有标签“序列号”的孩子,他们的“级别”是什么,以及他们的父母“序列号”是谁。
例如,具有以下XML
**<?xml version="1.0"?>
<data>
<Product Name="Product A">
<Country>US</Country>
<Year>2009</year>
<Serial Number>AB102</Serial Number>
<Document>
<Country>US</Country>
<Serial Number>BB103</SerialNumber>
</Document>
<Document>
<Country>IA</Country>
<Serial Number>CC102</Serial Number>
<Document>
<Serial Number>DD102</Serial Number>
</Document>
</Document>
</Product Name>
</data>
我想获取
Serial Number | Parent Serial Number | Level
AB102 root 0
BB103 AB102 1
CC102 AB102 1
DD102 CC102 2
我的第一个想法是尝试实现某种递归函数,但是我很难理解必须设置的逻辑才能使其起作用。是否有其他人做过类似的事情或知道如何正确实现此递归函数?
<?xml version="1.0"?>
<data>
<ProductName Name="Product A">
<Country>US</Country>
<Year>2009</Year>
<SerialNumber>AB102</SerialNumber>
<Document>
<Country>US</Country>
<SerialNumber>BB103</SerialNumber>
</Document>
<Document>
<Country>IA</Country>
<SerialNumber>CC102</SerialNumber>
<Document>
<SerialNumber>DD102</SerialNumber>
</Document>
</Document>
</ProductName>
</data>
import xml.etree.ElementTree as ET
tree = ET.parse('example.xml')
root = tree.getroot()
def process_children(tree_in, parent_name, depth):
next_depth = depth + 1
for c in list(tree_in):
if(c.tag == 'SerialNumber'):
print('{0} | {1} | {2}'.format(c.text, parent_name, depth))
parent_name = c.text
process_children(c, parent_name, next_depth)
process_children(root, 'root', -1)
AB102 | root | 0
BB103 | AB102 | 1
CC102 | AB102 | 1
DD102 | CC102 | 2