如何使用python脚本解析XML文档中存在的一些可选元素?

时间:2016-10-07 08:51:46

标签: python xml parsing

我从下面的链接收集了xml文件

http://ieeexplore.ieee.org/gateway/ipsSearch.jsp?py=2000&hc=100

我正在解析此xml文档中的TitleAbstractAuthorAffiliation,并创建单独的文本文件。有些文件有抽象元素,但很少有文件。我编写了一个python脚本,用于解析必填字段但如果上面提到的任何元素都不存在则不起作用。 PLZ建议任何可能的方法来跳过这样的文档:)

import xmltodict
for i in range (1000):
    with open('C:/Python27/Major Project/2000 ipsSearch.jsp.xml') as fd:
        fout = open(str(i)+".txt","w")   ## Flush old records from output file
        doc = xmltodict.parse(fd.read())
        w = doc['root']['document'][i]['rank']
        x = doc['root']['document'][i]['title']
        y = doc['root']['document'][i]['abstract']
        z = doc['root']['document'][i]['authors']
        a = doc['root']['document'][i]['affiliations']
        fout.write(str(w)+"\n"+str(x)+" "+str(y)+"\n"+str(z)+"\n"+str(a))

当任何abstract中没有document元素时出现错误。

1 个答案:

答案 0 :(得分:1)

以安全的方式播放 - 检查元素是否首先出现,否则分配一个空字符串。

现在,由于解析后的XML显示为字典,因此您可以使用in运算符来检查该字段,并使用三元if...else运算符来默认您无法找到abstract的情况:

    ...
    y = doc['root']['document'][i]['abstract'] if 'abstract' in doc['root']['document'][i] else ''
    z = doc['root']['document'][i]['authors'] if 'authors' in doc['root']['document'][i] else ''
    ...

所有元素都一样。