Python XML解析ElementTree复杂的XML结构

时间:2014-06-30 14:22:39

标签: python xml elementtree

我目前需要在python中解析XML文档。但是,我正在努力使用python库和这个相当复杂的xml。

我看过这里使用的方法:python read complex xml with ElementTree但它似乎不起作用?

我使用的是Python 2.7.7

XML取自http://nvd.nist.gov/download.cfm#CURRENTXML,例如我需要解析的一个条目如下所示: http://pastebin.com/qdPN98VX

我的相关代码目前看起来像这样。 我可以成功读取第一个条目的ID,但是,元素中的所有内容都不可访问。我也不确定ElementTree是否是50mb文件的最佳选择? :

from vulnsdb.models import Vuln as CVE


file = 'CVE/20140630-NVDCE-2.0-2014.xml'

tree = ET.parse(file)
root = tree.getroot()

for entry in root:
    c = CVE()
    c.name = entry.attrib['id']
    for details in entry:
        if details.find("{http://scap.nist.gov/schema/vulnerability/0.4}cve-id"):
            print details.find("{http://scap.nist.gov/schema/vulnerability/0.4}cve-id").text
    break

1 个答案:

答案 0 :(得分:2)

您可以使用xml.etree.ElementTree.iterparse()逐步解析树:

import xml.etree.ElementTree as ET


TAG = '{http://scap.nist.gov/schema/feed/vulnerability/2.0}entry'
ID = "CVE-2014-0001"

tree = ET.iterparse(open('CVE/20140630-NVDCE-2.0-2014.xml'))
for event, element in tree:
    if event == 'end' and element.tag == TAG and element.attrib.get('id') == ID:
        print ET.tostring(element)
        break