如何在XSLT中检测Saxon引擎版本以适配.NET库调用?
检测Saxon版本的实用方案
方法1:使用Saxon内置扩展函数 saxon:product-version()
Saxon 9.9和10版本均支持这个扩展函数,你需要先在XSLT根节点声明Saxon的命名空间:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/" version="2.0">
之后就能在模板或变量中直接调用该函数获取完整版本字符串:
<xsl:variable name="saxon-version" select="saxon:product-version()"/>
拿到版本号后,用字符串处理函数提取主版本号,再编写条件逻辑适配不同版本的.NET调用方式:
<!-- 提取主版本号(比如从"9.9.1.7"中得到9) --> <xsl:variable name="saxon-major" select="number(substring-before($saxon-version, '.'))"/> <xsl:choose> <xsl:when test="$saxon-major >= 10"> <!-- 这里写Saxon 10及以上版本调用.NET库的逻辑 --> </xsl:when> <xsl:when test="$saxon-major = 9"> <!-- 这里写Saxon 9.9版本调用.NET库的逻辑 --> </xsl:when> </xsl:choose>
方法2:通过系统属性间接获取
如果因环境限制无法使用扩展函数,可尝试读取Saxon暴露的系统属性:
- 针对.NET环境的Saxon,使用
system-property('net.sf.saxon.productVersion') - 通用场景也可尝试
system-property('saxon:product-version')(需提前声明Saxon命名空间)
示例代码:
<xsl:variable name="saxon-version" select="system-property('net.sf.saxon.productVersion')"/>
注意点
- 确认第三方应用Application X的Saxon实例启用了扩展支持(既然它本身基于Saxon开发,大概率没问题)
- 版本字符串格式可能为
9.9.1.7或10.6这类,提取主版本时注意兼容不同格式
内容的提问来源于stack exchange,提问作者Zor
相关产品推荐
相关产品推荐

