1

这是我在 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' object has no attribute '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)

任何帮助都感激不尽!

4

2 回答 2

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

ETC

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

于 2012-11-01T23:01:45.270 回答
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)
于 2013-01-25T02:50:39.180 回答