3737
3838class XMLResultParser (ResultParser ):
3939
40- def parse (self , source ):
40+ def parse (self , source , content_type = None ):
4141 return XMLResult (source )
4242
4343
4444class XMLResult (Result ):
45- def __init__ (self , source ):
45+ def __init__ (self , source , content_type = None ):
4646
47- xmlstring = source .read ()
48-
49- if isinstance (xmlstring , text_type ):
50- xmlstring = xmlstring .encode ('utf-8' )
5147 try :
5248 parser = etree .XMLParser (huge_tree = True )
53- tree = etree .parse (BytesIO ( xmlstring ) , parser )
49+ tree = etree .parse (source , parser )
5450 except TypeError :
55- tree = etree .fromstring (xmlstring )
56- except Exception as e :
57- log .exception ("Error parsing XML results: %s" % xmlstring )
58- raise e
51+ tree = etree .parse (source )
5952
6053 boolean = tree .find (RESULTS_NS_ET + 'boolean' )
6154 results = tree .find (RESULTS_NS_ET + 'results' )
@@ -65,18 +58,11 @@ def __init__(self, source):
6558 elif results is not None :
6659 type_ = 'SELECT'
6760 else :
68- g = Graph ()
69- try :
70- g .parse (data = xmlstring )
71- if len (g ) == 0 :
72- raise
73- type_ = 'CONSTRUCT'
74-
75- except :
76- raise ResultException (
77- "No RDF Graph, result-bindings or boolean answer found!" )
61+ raise ResultException (
62+ "No RDF result-bindings or boolean answer found!" )
7863
7964 Result .__init__ (self , type_ )
65+
8066 if type_ == 'SELECT' :
8167 self .bindings = []
8268 for result in results :
@@ -90,10 +76,11 @@ def __init__(self, source):
9076 './%shead/%svariable' % (
9177 RESULTS_NS_ET , RESULTS_NS_ET ))]
9278
93- elif type_ == 'ASK' :
79+ else :
9480 self .askAnswer = boolean .text .lower ().strip () == "true"
95- elif type_ == 'CONSTRUCT' :
96- self .graph = g
81+
82+
83+
9784
9885
9986def parseTerm (element ):
0 commit comments