我目前需要在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
答案 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