exslt.org扩展

时间:2010-01-26 17:34:08

标签: xml xslt exslt

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

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

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

我不知道出了什么问题,因为我对这些东西很陌生。我的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下载模块,但对我来说根本没有任何意义......

3 个答案:

答案 0 :(得分:3)

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

但是,您可以在Processor处编写和注册自己的扩展程序功能,这样您就可以轻松实现exsl:node-sethttp://www.saxonica.com/documentation/extensibility/integratedfunctions/

另一种选择是使用Saxon B 9.1

答案 1 :(得分:1)

这是一个XSLT 1.0样式表。 XSLT 2.0不需要许多EXSLT扩展函数,例如“exsl:node-set()”。您可以将此转换为XSLT 2.0样式表,通过将第一行中的“version”更改为2.0来执行相同的操作,并将“exsl:node-set($ step-output)”替换为“$ step-output” 。当然XSLT 2.0需要Saxon。

答案 2 :(得分:0)

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