Bug #5967
closedallow to set language version 4.0 for XPath evaluation
100%
Description
SaxonJ EE supports setting the XPath language version to 4.0 (for the currently experimental XPath 4.0 support); it appears that SaxonC so far only allows that for XQuery (where a lang
argument has been added to the API) but it so far lacks such an API for XPath evaluation.
It seems desirable to also allow pure XPath 4.0 evaluation with SaxonC.
Updated by O'Neil Delpratt over 1 year ago
- Status changed from New to In Progress
Thanks for reporting this omission. Looking into it now.
Updated by O'Neil Delpratt over 1 year ago
The setLanguageVersion
method is available on the XPathProcessor for the C++ and PHP APIs but is missing from the Python API.
Updated by O'Neil Delpratt over 1 year ago
As a workaround in Python API user can set the language as follows:
xpath_processor.set_property("lang:", "4.0")
Updated by O'Neil Delpratt over 1 year ago
- Status changed from In Progress to Resolved
The set_language_version method has now been added to the PyXPathProcessor class. Available in the next maintenance release.
Updated by O'Neil Delpratt over 1 year ago
- Status changed from Resolved to Closed
- % Done changed from 0 to 100
- Fixed in version set to 12.2
Bug fix applied in the SaxonC 12.2 maintenance release.
Updated by Martin Honnen 7 months ago
I find this is not working in SaxonC EE 12.4.2, code like
from saxoncee import PySaxonProcessor, PySaxonApiError
with PySaxonProcessor(license=True) as saxon_proc:
print(saxon_proc.version)
xpath_proc = saxon_proc.new_xpath_processor()
xpath_proc.set_language_version('4.0')
try:
print(xpath_proc.evaluate('(1 to 5)=!>fn{. + .}()'))
except PySaxonApiError as e:
print(e)
try:
print(xpath_proc.evaluate('parse-html("<p>Test.<p>Test")'))
except PySaxonApiError as e:
print(e)
gives
SaxonC-EE 12.4.2 from Saxonica
XPST0003: The parser is not configured to allow use of XPath 4.0 syntax. Line number: -1
XPST0017: Cannot find a 1-argument function named Q{http://www.w3.org/2005/xpath-functions}parse-html(). Line number: -1
as does the workaround:
from saxoncee import PySaxonProcessor, PySaxonApiError
with PySaxonProcessor(license=True) as saxon_proc:
print(saxon_proc.version)
xpath_proc = saxon_proc.new_xpath_processor()
xpath_proc.set_property('lang:', '4.0')
try:
print(xpath_proc.evaluate('(1 to 5)=!>fn{. + .}()'))
except PySaxonApiError as e:
print(e)
try:
print(xpath_proc.evaluate('parse-html("<p>Test.<p>Test")'))
except PySaxonApiError as e:
print(e)
I haven't been able to identify so far whether this is a regression or whether it never worked for the Python XPath API.
Updated by Martin Honnen 7 months ago
So looking at https://saxonica.plan.io/projects/saxonmirrorhe/repository/he/revisions/he_mirror_saxon_12_4_2/entry/src/main/java/net/sf/saxon/option/cpp/XPathProcessor.java#L417 which does
if (parameterMap.containsKey("lang:")) {
valuei = (String) parameterMap.get("lang");
I wonder whether the second line should do
valuei = (String) parameterMap.get("lang:");
instead?
Updated by O'Neil Delpratt 7 months ago
Yes that is the problem.
And because of comment #7 the following hack/workaround works for me:
xpath_proc.set_property('lang:', '4.0')
xpath_proc.set_property('lang', '4.0')
Updated by Martin Honnen 7 months ago
Oh, yes, that is smart thinking.
Nevertheless I hope you reopen this bug and fix it for the next maintenance release.
Updated by O'Neil Delpratt 7 months ago
- Status changed from Closed to In Progress
- Fixed in version deleted (
12.2)
Reopening this bug issue.
Updated by Matt Patterson 5 months ago
- Status changed from In Progress to Resolved
- Assignee changed from O'Neil Delpratt to Matt Patterson
- Fixed in version set to 12.5.0
set_language_version
now works in the Python (and C++) APIs.
Updated by O'Neil Delpratt 5 months ago
- Tracker changed from Feature to Bug
- Status changed from Resolved to Closed
- Fixed in version changed from 12.5.0 to 12.5
Bug fix applied in the Saxon 12.5 Maintenance release.
Please register to edit this issue