提取所有xml子节点

时间:2014-08-07 15:48:34

标签: xml python-3.x

我有一些xml具有以下结构,并且我试图将所有协作者字符串提取到列表中以供进一步分析

<sponsors>
  <lead_sponsor>University of Erlangen-Nürnberg Medical School</lead_sponsor> 
  <collaborator>University Hospital Regensburg</collaborator> 
  <collaborator>Wuerzburg University Hospital</collaborator> 
  <collaborator>University Hospital, Essen</collaborator> 
  <collaborator>German Research Foundation</collaborator> 
</sponsors>

我提出的代码似乎可以将第一个合作伙伴拉出来,然后放入一个&#39; ???&#39;如果没有合作者,但如果没有合作者,则不会是剩下的合作者,我无法弄清楚原因。在这里查看类似的问题似乎表明它可以工作,但我显然误解了一些东西。这就是我所拥有的:

tree = etree.parse(infile)
root = tree.getroot()
for elem in tree.iter(tag='sponsors'):
    child = elem.find('collaborator')
    if child is not None:
        co = child.text
    else:
        co = "???"
    collaborator.append(co)
    print(co)

我哪里错了?

1 个答案:

答案 0 :(得分:0)

问题是for循环没有迭代每个子元素,只是获得赞助商的第一个孩子并退出。 这些方面应该有用:

tree = etree.parse(infile)
root = tree.getroot()
for elem in tree.getiterator():
    if elem.tag!='sponsors':
        if elem.tag == 'collaborator':
            co = elem.text
        else:
            co = "???"
        collaborator.append(co)   
        print(co)