这是我第一次尝试使用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)
感激不尽的任何帮助!
答案 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)