AttributeError:解析XML时

时间:2012-11-01 22:56:51

标签: python-3.x elementtree

这是我第一次尝试使用Python并从XML文件中提取信息,因此对此问题的新手性质表示道歉。

我想从XML文件中提取作者姓名,其中信息的结构如下:

<Author ValidYN="Y">
   <LastName>Duck</LastName>
    <ForeName>Donald</ForeName>
    <Initials>D</Initials>
</Author>

每隔一段时间就会出现一个如下所示的条目:

<Author ValidYN="Y">
    <CollectiveName>Some Corp</CollectiveName>
</Author>

我在第一个示例中使用的代码工作得很好,但如果遇到第二个代码则会出现问题,并显示 AttributeError:'NoneType'对象没有属性'text'消息。根据我对发生的事情的基本理解,我认为错误的产生仅仅是因为没有任何东西可以找到。我无法解决的是如何让它忽略第二个例子并继续寻找下一个作者。

以下是代码:

import xml.etree.ElementTree as etree

infile = r'C:\temp\test.xml'

authors = []
tree = etree.parse(infile)
root = tree.getroot()
for elem in tree.iter(tag='Author'):
    sn = elem.find('LastName').text
    fn = elem.find('Initials').text
    authors.append(fn + ' ' + sn)
for x in authors:
    print (x)

感激不尽的任何帮助!

2 个答案:

答案 0 :(得分:1)

child = elem.find('LastName')
if child != None : sn = child.text

在没有LastName元素的节点中,Find返回None,None没有text属性,这是错误告诉你的。

答案 1 :(得分:0)

以下是代码解决您面临的问题的方式:

    import xml.etree.ElementTree as etree

    infile = r'test.xml'

    authors = []
    tree = etree.parse(infile)
    root = tree.getroot()
    for elem in tree.iter(tag='Author'):
        snode = elem.find('LastName')
        if snode is not None:
            sn = snode.text
        fnode = elem.find('Initials')
        if fnode is not None:
            fn = fnode.text
        if (fnode is not None) and (snode is not None):
            authors.append(fn + ' ' + sn)
    for x in authors:
        print (x)