在Python中进行SAX解析的最快方法

时间:2013-06-14 04:16:58

标签: python xml xml-parsing sax celementtree

我有一个XML文档(1.5MB)需要实时解析我正在开发的Web服务。我正在使用cElementTree Python库,根据这个post,它是在Python中解析XML的首选方法,但我不确定这是否真的是最快的方式。

我想提高解析性能以及最小化服务器上​​的内存使用量,并且目前正在使用 ET.iterparse()测试SAX方法。我的基准测试显示以下结果,用于纯粹解析相同的XML文档200次。

  • DOM ET.XML() 20.5s
  • SAX与 ET.iterparse() 32.4s

相当于DOM的 102ms ,而每个XML文档的SAX 162ms

然而,我仍然希望从SAX方法中挤出更多性能以匹配102ms的DOM,或者可能更快,因为性能和内存在我的应用程序中都是至关重要的。

我正在使用SAX解析的常用方法之一,如下面的代码:

from cStringIO import StringIO
import xml.etree.cElementTree as ET

def parse(xml_string):  
    result = []
    io = StringIO(xml_string)
    context = ET.iterparse(io, events=("start", "end"))
    for event, elem in context:
        tag = elem.tag
        value = elem.text

        if event == 'end':
            # get value from element and add to result[]
            pass

            elem.clear()

    return result

0 个答案:

没有答案