2013-10-08 1 views
0

저는 파서 (parser)를 사용하여 xml 플로우에 대한 바인딩을 생성하기 위해 PyXB를 사용해 왔습니다. 파서가 제공하는 것은 성능 문제를 일으 킵니다. 따라서 제한된 경험으로 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() 

Inxml?

답변

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),)) 
관련 문제