Forums » Saxon/C Help and Discussions »
How the set the base output URI of XSLT 3 in Python API?
Added by Martin Honnen about 5 years ago
The .NET and the Java API of Xslt30Transformer have a property/setter for the base output URI e.g. http://saxonica.com/html/documentation/dotnetdoc/Saxon/Api/Xslt30Transformer.html#BaseOutputURI or http://saxonica.com/html/documentation/javadoc/net/sf/saxon/s9api/Xslt30Transformer.html#setBaseOutputURI-java.lang.String-.
For the Python API I am not sure how to set this, I have tried to use set_cwd
with e.g.
xslt30_processor.set_cwd(os.getcwd())
but this doesn't seem to help with a stylesheet called for the name="xsl:initial-template"
and xsl:result-document
instructions with relative URIs in the href
attribute. I get an error
Error in xsl:result-document/@href on line 19 column 94 of sheet.xsl:
SXRD0002: The system identifier of the principal output file is unknown
at template xsl:initial-template on line 16 of sheet.xsl:
invoked by xsl:iterate at file:///C:/SomeDir/sheet.xsl#17
at template xsl:initial-template on line 16 of sheet.xsl:
invoked by unknown caller (null)
The Python code (run against saxonc of HEC 1.2.1) is like this:
import saxonc
import os
with saxonc.PySaxonProcessor() as proc:
print(proc.version)
xslt30_processor = proc.new_xslt30_processor()
xslt30_processor.set_cwd(os.getcwd())
result = xslt30_processor.call_template_returning_string(stylesheet_file = 'streaming-sheet2.xsl', output_file = 'python-result-sheet2.xml')
print(result)
Replies (3)
Please register to reply
RE: How the set the base output URI of XSLT 3 in Python API? - Added by Martin Honnen about 5 years ago
The problem seems to be specific to call_template_returning_string
, with xslt30_processor.call_template_returning_file
the above works.
Should call_template_returning_string
return the primary result as a string but write any secondary results to files if set_cwd
has been used?
RE: How the set the base output URI of XSLT 3 in Python API? - Added by O'Neil Delpratt about 5 years ago
Hi Martin,
Thanks for reporting problem. The setter method for the base output URI is missing from Saxon/C. I have created the following bug issue to keep track of the fix: #4395
The fix will be available in the next release.
RE: How the set the base output URI of XSLT 3 in Python API? - Added by O'Neil Delpratt about 5 years ago
I have made changes to the API to now make it possible to set the base_output_uri either:
xslt30_processor.set_base_output_uri('/path-dir')
or
result = xslt30_processor.call_template_returning_string(stylesheet_file = 'streaming-sheet2.xsl', base_output_uri = '/path-dir')
The keyword argument base_output_uri
is available for the other stylesheet execution function.
Please register to reply