如何在lxml中创建绑定实例?

时间:2013-10-08 09:24:25

标签: xml python-2.7 xsd lxml pyxb

我一直在使用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中?

1 个答案:

答案 0 :(得分: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),))