簡體   English   中英

如何遍歷XML並在python中使用elementtree正確打印?

[英]How do I loop through XML and print properly using elementtree in python?

我得到整個xml中的每個childtwo以及整個文檔中的每個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM