Python:附加两个XML标记

时间:2014-08-18 23:36:23

标签: python xml

我有这个XML文件,我想使用Python的xml.etree读取一些数据:

<a>
   <b>
      <AuthorName>
         <GivenName>John</GivenName> 
         <FamilyName>Smith</FamilyName>
      </AuthorName>
      <AuthorName>
         <GivenName>Saint</GivenName> 
         <GivenName>Patrick</GivenName>
         <FamilyName>Thomas</FamilyName>
      </AuthorName>
   </b>
</a>

我希望得到的结果是:

John Smith
Saint Patrick Thomas

你可能已经注意到,有时我有1个GivenName标签,有时我有2个GivenName标签

我做的是:

from xml.etree import ElementTree as ET
xx = ET.parse('file.xml')
authorName = xx.findall('.//AuthorName')
for name in authorName:
    print(name[0].text + " " + name[1].text)

它与1 GivenName标签一起工作正常,但是当我有2时它没有。

我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:2)

试试这个:

from xml.etree import ElementTree as ET
xx = ET.parse('file.xml')
authorName = xx.findall('.//AuthorName')
for name in authorName:
    nameStr = ' '.join([child.text for child in name])
    print(nameStr)

您必须查看authorName中的所有子标记,获取其文本,然后将它们加入您的nameStr。

答案 1 :(得分:1)

看起来你并没有真正使用你的循环。这样的事情可能会对你有所帮助:

from xml.etree import ElementTree as ET
xx = ET.parse('file.xml')
authorName = xx.finall('.//AuthorName')

nameParts = []
for name in authorName:
    fullName.append(name)

fullName = ' '.join(nameParts)

print(fullName)

现在,您可以在这里做一件让您的生活更轻松的事情是了解列表理解。例如,以上内容可以简化为:

from xml.etree import ElementTree as ET
xx = ET.parse('file.xml')
authorName = xx.finall('.//AuthorName')

fullName = ' '.join((name.text for name in xx.findall('.//AuthorName')))
print(fullName)

注意:这实际上并未经过测试。可能存在拼写错误。