0

我一直在使用 PyXB 使用它的解析器为 xml 流生成绑定,它可以工作,但是解析器给了我性能问题。因此,我想以我有限的经验尝试使用 lxml。我怎样才能在这里做我的例子:

import pyxb.binding.saxer
import StringIO

saxer = pyxb.binding.saxer.make_parser()
handler = saxer.getContentHandler()
saxer.parse(StringIO.StringIO(xml))
instance = handler.rootObject()

在 lxml 中?

4

1 回答 1

1

在 pyxb/utils/saxutils.py 中有使用不同解析器的示例,包括两种风格的 lxml,但这些实际上并不构建绑定。examples/tmsxtvd 可用于评估不同解析器的性能。在该区域将以下内容添加到 dumpsample.py 似乎可行,尽管性能与其他方法没有太大区别:大部分时间都在处理内容以验证它。

import lxml.sax
import lxml.etree

lsh = pyxb.binding.saxer.PyXBSAXHandler()
lst1 = time.time()
tree = lxml.etree.fromstring(xmld)
lst2 = time.time()
lxml.sax.saxify(tree, lsh)
lst3 = time.time()
lxml_instance = handler.rootObject()
print('LXML-based read %f, parse and bind %f, total %f' % (lst2-lst1, lst3-lst2, lst3-lst1))
print("Equality test on DOM vs LXML: %s" % (dom_instance.equal(lxml_instance),))
于 2013-10-23T19:36:04.830 回答