Forums » Saxon/C Help and Discussions »
repeatedly calling run_query_to_string seems to return the result of the first call
Added by Martin Honnen about 5 years ago
Using Saxon HEC 1.2.1 I wrote the following sample Python program:
import saxonc
with saxonc.PySaxonProcessor() as proc:
print(proc.version)
xml = '''<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>'''
input_xml = proc.parse_xml(xml_text = xml)
print(input_xml)
xquery_processor = proc.new_xquery_processor()
xquery_processor.set_context(xdm_item = input_xml)
for query in ['.', 'count(//*)', '(1 to 10) ! ("Example " || .)']:
print(xquery_processor.run_query_to_string(query_text = query))
The output I get is
Saxon/C 1.2.1 running with Saxon-HE 9.9.1.5C from Saxonica
<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>
<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>
<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>
<root>
<items>
<item>foo</item>
<item>bar</item>
</items>
</root>
so it seems the first query is executed three times or the second and third query execution return the result of the first execution.
Is that meant to work that way? Do I have to reset the processor somehow?
Creating a new PyXQueryProcessor for each call works:
for query in ['.', 'count(//*)', '(1 to 10) ! ("Example " || .)']:
xquery_processor = proc.new_xquery_processor()
xquery_processor.set_context(xdm_item = input_xml)
print(xquery_processor.run_query_to_string(query_text = query))
Replies (1)
RE: repeatedly calling run_query_to_string seems to return the result of the first call - Added by O'Neil Delpratt about 5 years ago
This is a bug. I have created the following bug issue: https://saxonica.plan.io/issues/4386
I will get a fix out ASAP.
A workaround would be to call clearProperties() before updating new values.
The following should work:
xquery_processor = proc.new_xquery_processor()
for query in ['.', 'count(//*)', '(1 to 10) ! ("Example " || .)']:
xquery_processor.set_context(xdm_item = input_xml)
print(xquery_processor.run_query_to_string(query_text = query))
xquery_processor.clear_properties()
Please register to reply