如何循环循环XML并使用Python中的ElementTree正确打印



我在整个文档中都打印了整个XML中的每个孩子。我如何才能得到与ChildOne一起陪伴的孩子?

import xml.etree.ElementTree as ET            
tree = ET.parse("C:/Users/thisuser/Desktop/test.xml")
root = tree.getroot()
for ticket in root.findall('.//Parent'):
    Childone = ticket.find('.//Childone').text
    for ticket in root.findall('.//ParentTwo'):
        Childtwo = ticket.find('.//Childtwo').text
        print "Childone={Childone}, Childtwo={Childtwo}".format(Childone=Childone, Childtwo=Childtwo)

结果

ChildOne=1  ChildTwo=a
ChildOne=1  ChildTwo=b
ChildOne=1  ChildTwo=c
ChildOne=1  ChildTwo=d
ChildOne=2  ChildTwo=a
ChildOne=2  ChildTwo=b
ChildOne=2  ChildTwo=c
ChildOne=2  ChildTwo=d

所需结果

ChildOne=1  ChildTwo=a
ChildOne=1  ChildTwo=b
ChildOne=2  ChildTwo=c
ChildOne=2  ChildTwo=d

XML样本

<Parent>
    <Childone>1</Childone>
        <ParentTwo>
            <Childtwo>a</Childtwo>
        </ParentTwo>
        <ParentTwo>
            <Childtwo>b</Childtwo>
        </ParentTwo>
</Parent>
<Parent>
    <Childone>2</Childone>
        <ParentTwo>
            <Childtwo>c</Childtwo>
        </ParentTwo>
        <ParentTwo>
            <Childtwo>d</Childtwo>
        </ParentTwo>
</Parent>

问题是您在第二个for循环的findall中使用root

for ticket in root.findall('.//ParentTwo'):

相反,您应该使用外循环中的ticket来限制找到哪些ParentTwo元素。(还请注意,由于您已经使用了ticket,因此我将ticket更改为ticket2。):

for ticket2 in ticket.findall('.//ParentTwo'):

完整编辑的代码...

import xml.etree.ElementTree as ET
tree = ET.parse("C:/Users/thisuser/Desktop/test.xml")
root = tree.getroot()
for ticket in root.findall('.//Parent'):
    Childone = ticket.find('.//Childone').text
    for ticket2 in ticket.findall('.//ParentTwo'):
        Childtwo = ticket2.find('.//Childtwo').text
        print "Childone={Childone}, Childtwo={Childtwo}".format(Childone=Childone, Childtwo=Childtwo)

最新更新