2

我第一次尝试 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>

包使用.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。

4

1 回答 1

1

我在这里记录了一个撒克逊错误:

https://saxonica.plan.io/issues/2541

恐怕在我们发布补丁之前,除了从 s9api API 而不是从命令行运行转换之外,没有其他解决方法。

当你克服这个问题时,你会遇到另一个问题:你的包需要声明它使用的模式。添加一个空<xsl:mode/>声明是最小的修复。

于 2015-12-15T11:35:56.660 回答