如何在XSLT 3.0中调用XQuery模块?Saxon EE环境报错排查
在XSLT 3.0中复用XQuery模块失败
此前在Oracle数据库中使用大量XQuery逻辑处理XML payload的增强操作,现需迁移至支持XSLT 3.0的新平台,希望在XSLT中直接复用现有XQuery逻辑。已知可通过fn:load-xquery-module()实现,但在Oxygen XML Editor 24.0(内置Saxon EE 9.9.1.7,与服务器运行环境一致)中测试未成功。
XQuery模块(myfuncs.xq,与XSLT同目录)
module namespace myfuncs = "http://example.com/functions"; declare function myfuncs:double($num as xs:double) as xs:double { $num * 2 }; declare function myfuncs:triple($num as xs:double) as xs:double { $num * 3 };
测试用XSLT代码(使用本地绝对路径,已脱敏)
<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xf="http://www.w3.org/2002/xforms" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:myfuncs="http://example.com/functions" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:saxon="http://saxon.sf.net/" exclude-result-prefixes="xs"> <!-- Load the XQuery module --> <xsl:function name="myfuncs:double" as="xs:double"> <xsl:param name="num" as="xs:double"/> <xsl:sequence select="fn:load-xquery-module('file:C:\Users\...\...\myfuncs.xq') ! myfuncs:double($num)"/> </xsl:function> <xsl:function name="myfuncs:triple" as="xs:double"> <xsl:param name="num" as="xs:double"/> <xsl:sequence select="fn:load-xquery-module('file:C:\Users\...\...\myfuncs.xq') ! myfuncs:triple($num)"/> </xsl:function> <!-- Example usage --> <xsl:template match="/"> <result> <double> <xsl:value-of select="myfuncs:double(5)"/> </double> <triple> <xsl:value-of select="myfuncs:triple(5)"/> </triple> </result> </xsl:template> </xsl:stylesheet>
错误信息
错误提示:无法定位命名空间对应的模块:file:C:\Users...myfuncs.xq
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

