Python:具有多个子根树的大型XML解析

Python:具有多个子根树的大型XML解析,python,xml,parsing,Python,Xml,Parsing,需要使用python(XML.etree.ElementTree)解析大型XML文件,以处理并生成一个报告,如预期部分所示 我不知道如何在第4层才能了解某些细节,如何从第4层进入第5层才能了解相关数据。在哪里循环以及如何引用孩子们,是我的问题。请给出您可能有的任何建议,谢谢 Input XML File: raw_data.xml <?xml version="1.0" encoding="ISO-8859-1"?> <FirstLevel Flevel="my1">

需要使用python(XML.etree.ElementTree)解析大型XML文件,以处理并生成一个报告,如预期部分所示

我不知道如何在第4层才能了解某些细节,如何从第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
输入XML文件:raw_data.XML
-----------------------------------------------------------
我的代码:
将xml.etree.ElementTree作为ET导入
tree=ET.parse('raw_data.xml'))
root=tree.getroot()
mylevel=root.findall('.//FourthLevel')
对于我所在级别的我:
打印(“mydata=,i.get('mydata'),“\t”)
assoc=root.findall('.//FifthLevel')####assoc:关联数据的临时变量
对于协会中的j:
打印(“associated=”,j.get('associated'),“\n”)
输出:final_Output.txt
mydata=Needed1关联=Needed1所需
mydata=Needed2 associated=Needed2需要
mydata=Needed3关联=Needed3-1需要
mydata=Needed3关联=Needed3-1需要
mydata=Needed4关联=Needed4-1需要
mydata=Needed4关联=Needed4-1需要
您已经在迭代名为“//FourthLevel”的根节点的子节点。您只需对每个名为“FifthLevel”的子级及其子级应用相同的原则(注意缺少斜线)

转换为代码后,只需替换以下行:

assoc=root.findall('.//第五层')
作者:

assoc=i.findall(“第五级”)

因为只有当前节点(第四级)才需要第五级子节点,而不是整个树。查看更多详细信息。

不要使用
root.findall('.//FifthLevel')
,请尝试
i.findall('FifthLevel')
。谢谢,它成功了。您可能应该将答案标记为问题的解决方案(如果允许的话-考虑到问题是重复的)。