exslt.org 扩展
我正在尝试在我的一项转换中使用 exslt 扩展。我从这个网站得到了一个关于如何将 xml 文件连接成一个的示例。
我已经正确实现了命名空间和元素前缀,但是每次尝试从命令行运行它时,我都会收到以下错误...
找不到名为 {http://exslt.org/common}变量step-concat中的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 下载该模块,但它对我来说根本没有任何意义......
I am trying to use an exslt extension in one of my transformations. I got an example off this site about how to concatenate xml files into one.
I have implemented the namespace and the element prefix correctly, but every time I try and run it from my command line I recieve the following error...
Cannot find a matching 1-argument function named {http://exslt.org/common}node-set() in variable step-concat (filename and line number are in here blah blah blah)
I have no idea what is going wrong as I am quite new to this stuff. My xsl file is
<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>
What am I doing wrong? I have tried downloading the module from exslt.org, but it doesn't make any sense to me at all...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
与 Saxon PE 不同,Saxon HE 不提供任何内置扩展功能。
但是,您可以在
处理器
上编写并注册自己的扩展函数,这样您就可以轻松实现exsl:node-set
:http://www.saxonica.com/documentation/extensibility/integratedfunctions/
另一个另一种方法是使用 Saxon B 9.1
Saxon HE does not provide any built-in extension function, unlike Saxon PE.
However, you can write and register your own extension functions at the
Processor
, so you could easily implementexsl:node-set
:http://www.saxonica.com/documentation/extensibility/integratedfunctions/
Another alternative is to use Saxon B 9.1
这是一个 XSLT 1.0 样式表。 XSLT 2.0 使得许多 EXSLT 扩展函数变得不必要,例如“exsl:node-set()”。您可以将其转换为 XSLT 2.0 样式表,通过将第一行中的“版本”更改为 2.0 来执行相同的操作,并将“exsl:node-set($step-output)”替换为“$step-output” 。当然,XSLT 2.0 需要 Saxon。
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.
exslt.org 的内容仅在您将扩展注册/添加到 XSLT 引擎时才起作用。由于你没有提及任何有关你的平台的信息,所以很难帮助你。
The exslt.org stuff only works when you register/add the extensions to your XSLT engine. Since you don't mention anything about your platform, it's kind of hard to help you out.