1

我正在尝试在我的一个转换中使用 exslt 扩展。我从这个网站上得到了一个关于如何将 xml 文件连接成一个的例子。

我已经正确实现了命名空间和元素前缀,但是每次我尝试从命令行运行它时,我都会收到以下错误...

在变量 step-concat 中找不到名为 { http://exslt.org/common }node-set() 的匹配 1-argument 函数(文件名和行号在这里等等等等)

我不知道出了什么问题,因为我对这些东西很陌生。我的 xsl 文件是

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">

<!-- STEP Files -->
<xsl:variable name="step-output">
    <xsl:for-each select="/index/file">
        <xsl:copy-of select="document(.)" />
    </xsl:for-each>
</xsl:variable>

<!-- STEP Files as one -->
<xsl:variable name="step-concat" select="exsl:node-set($step-output)" />

<!-- Root Template -->
<xsl:template match="/">
    <xsl:element name="foo">
        <xsl:apply-templates select="$step-concat/foo"/>
    </xsl:element>
</xsl:template>

<xsl:template match="foo">
    <xsl:element name="text">
        <xsl:value-of select="bar"/>
    </xsl:element>
</xsl:template>

我究竟做错了什么?我尝试从 exslt.org 下载模块,但对我来说根本没有任何意义......

4

3 回答 3

3

与 Saxon PE 不同,Saxon HE 不提供任何内置扩展功能。

但是,您可以在 中编写和注册自己的扩展函数Processor,这样您就可以轻松实现exsl:node-set: http: //www.saxonica.com/documentation/extensibility/integratedfunctions/

另一种选择是使用 Saxon B 9.1

于 2010-01-27T18:07:31.723 回答
2

That's an XSLT 1.0 stylesheet. XSLT 2.0 makes many of the EXSLT extension functions unnecessary, such as "exsl:node-set()". You could convert this to an XSLT 2.0 stylesheet that does the same thing by changing the "version" in the first line to 2.0, and replace "exsl:node-set($step-output)" with just "$step-output". Of course XSLT 2.0 would require Saxon.

于 2010-02-28T21:05:30.523 回答
0

exslt.org 的东西只有在您注册/添加扩展到您的 XSLT 引擎时才有效。由于您没有提及有关您的平台的任何内容,因此很难为您提供帮助。

于 2010-01-26T17:41:13.183 回答