2013-10-08 49 views
0

我一直在使用PyXB爲xml流使用其解析器生成綁定,該解析器可以工作,但解析器給了我性能問題。因此,我想嘗試使用lxml,而不是以我有限的經驗。我怎樣才能讓我的例子在這裏:如何在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

有一些使用不同解析器的例子,包括pyxb/utils/saxutils.py中兩種不同的解析器,但它們實際上並不構建綁定。 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),)) 
相關問題