我第一次尝试xsl:package但在命令行上出错 -
xml(未真正使用) -
<woot/>
package.xsl -
<?xml version="1.0" encoding="UTF-8"?>
<xsl:package name="http://example.org/package.xsl"
package-version="1.0" version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://example.org/package">
<xsl:function name="f:woot" visibility="public">
<xsl:value-of select="'DANGGGG'"/>
</xsl:function>
</xsl:package>
包use.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:package name="http://example.org/package-use.xsl"
package-version="1.0" version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:f="http://example.org/package">
<xsl:use-package name="http://example.org/package.xsl" package-version="1.0"/>
<xsl:template match="/">
<xsl:variable name="output-text" select="f:woot()"/>
<xsl:value-of select="$output-text"/>
</xsl:template>
</xsl:package>
在命令行上(使用saxon 9.7)
> java -jar saxon9ee.jar woot.xml package-use.xsl;package.xsl
返回 -
可能的循环包依赖
我尝试使用Saxon 9.6对Oxygen XML进行类似的转换,并获得了java.lang.NullPointerException。
答案 0 :(得分:1)
我在这里记录了一个撒克逊人的错误:
https://saxonica.plan.io/issues/2541
我担心在发布补丁之前,除了从s9api API而不是从命令行运行转换之外,没有其他解决方法。
当你超越这个时,你会遇到另一个问题:你的包需要声明它使用的模式。添加空<xsl:mode/>
声明是最低限度的修复。