【发布时间】:2019-02-05 06:39:37
【问题描述】:
需要用python(xml.etree.ElementTree)解析大的XML文件来处理和生成报告,如预期部分所示。
我无法弄清楚如何在第 4 级之前了解某些细节,然后再从第 5 级了解相关/相关数据。在哪里循环以及如何引用孩子,是我的问题。有什么建议请大家多多指教,谢谢。
Input XML File: raw_data.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<FirstLevel Flevel="my1">
<SecondLevel Slevel="my2">
<ThirdLevel Tlevel="my3">
<FourthLevel test="1" mydata="Needed1">
<FifthLevel associated="Required for Needed1"/>
</Fourthlevel>
<FourthLevel test="2" mydata="Needed2">
<FifthLevel associated="Required for Needed2"/>
</Fourthlevel>
<FourthLevel test="3" mydata="Needed3">
<FifthLevel associated="Required for Needed3-1"/>
<FifthLevel associated="Required for Needed3-2"/>
</Fourthlevel>
<FourthLevel test="4" mydata="Needed4">
<FifthLevel associated="Required for Needed4-1"/>
<FifthLevel associated="Required for Needed4-2"/>
</Fourthlevel>
</ThirdLevel>
</SecondLevel>
</FirstLevel>
-----------------------------------------------------------
My Code:
import xml.etree.ElementTree as ET
tree = ET.parse('raw_data.xml')
root=tree.getroot()
mylevel=root.findall('.//FourthLevel')
for i in mylevel:
print ("mydata=",i.get('mydata'),"\t")
assoc=root.findall('.//FifthLevel') ### assoc: Temporary variable for associated data
for j in assoc:
print ("associated=",j.get('associated'),"\n")
Output: final_output.txt
mydata=Needed1 associated=Required for Needed1
mydata=Needed2 associated=Required for Needed2
mydata=Needed3 associated=Required for Needed3-1
mydata=Needed3 associated=Required for Needed3-1
mydata=Needed4 associated=Required for Needed4-1
mydata=Needed4 associated=Required for Needed4-1
【问题讨论】:
-
试试
root.findall('.//FifthLevel'),而不是i.findall('FifthLevel')。