1

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

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

  • 带有 ET.XML() 的 DOM 20.5
  • 带有 ET.iterparse() 的 SAX 32.4

这相当于每个 XML 文档的 DOM大约102毫秒,而SAX大约 162 毫秒。

但是,我仍然希望从 SAX 方法中挤出更多性能以匹配 102 毫秒的 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
4

0 回答 0