使用elementTree解析子元素

时间:2012-11-14 18:32:50

标签: python xml parsing elementtree

我在XML文件中有代码,我使用et.parse解析:

<VIAFCluster xmlns="http://viaf.org/viaf/terms#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:void="http://rdfs.org/ns/void#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
<viafID>15</viafID>
<nameType>Personal</nameType>
</VIAFCluster>
<mainHeadings>
    <data>
       <text>
          Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
       </text>
    </data>
</mainHeadings>

我希望将其解析为:

[15,“个人”,“贡德林等”]

我似乎无法打印任何字符串信息:

import xml.etree.ElementTree as ET

tree = ET.parse('/Users/user/Documents/work/oneline.xml')
root = tree.getroot()

for node in tree.iter():
    name = node.find('nameType')
    print(name)

因为它显示为“无”......我做错了什么?

1 个答案:

答案 0 :(得分:1)

我仍然不确定你想要做什么,但希望如果你运行下面的代码,它将帮助你走上正轨。通过元素使用getiterator函数可以让你看到发生了什么。当你来到他们时,你可以拿起你想要的东西:

import xml.etree.ElementTree as et
xml = '''
<VIAFCluster xmlns="http://viaf.org/viaf/terms#" 
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
             xmlns:void="http://rdfs.org/ns/void#" 
             xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <viafID>15</viafID>
    <nameType>Personal</nameType>
    <mainHeadings>
        <data>
           <text>
              Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
           </text>
        </data>
    </mainHeadings>
</VIAFCluster>
'''
tree = et.fromstring(xml)
lst = []
for i in tree.getiterator():
    t = i.text.strip()
    if t:
        lst.append(t)
        print i.tag
        print t

您最终会得到一个列表。我不得不清理你的xml,因为你有多个顶级元素,这是一个禁忌。也许这一直是你的问题。

祝你好运,迈克