[英]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.