如何将 xpath-functions 与 XSLT 2.0 一起使用



为了使用 xpath-functions(特别是fn部分),我将相应的命名空间包含在我的 xslt 样式表中,如下所示:

<xsl:stylesheet
  version="2.0"
  xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:fn="http://www.w3.org/2005/xpath-functions"
>

由 W3C 指定。

但是,当我使用 fn:document-uri 时,我的 XSLT 引擎告诉我我调用了一个未知的函数/扩展:

  <xsl:variable name="uri" select="fn:document-uri()" />

歌剧 说:

此文档具有无效的 XSLT 样式表。来自 XSLT 引擎的错误消息:
错误:XPath 表达式编译失败:fn:document-uri()
详细信息:编译错误(字符 1-17,"fn:document-uri()"):调用的未知函数:"{ http://www.w3.org/2005/xpath-functions,文档 uri }"

火狐 说:

XSLT 转换期间出错:调用了未知的 XPath 扩展函数。

xsltproc拒绝转型,因为 xslt 2.0。

那么,如何正确指定fn命名空间呢?

问题是您使用的是 XSLT 1.0 处理器,而 XSLT 1.0 处理器不知道(并且一定不知道)有关 XPath 2.0 函数的任何信息

如果使用真正的 XSLT 2.0 处理器,则甚至不必指定函数命名空间 - 它是任何无前缀函数名称的默认命名空间。

例如,此 XSLT 2.0 转换

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>
 <xsl:template match="/">
    <xsl:sequence select="document-uri(.)" />
    <xsl:text>&#xA;</xsl:text>
    <xsl:sequence select="document-uri(document(''))" />
 </xsl:template>
</xsl:stylesheet>

在 XSelerator 下使用 Saxon 9.1.5 执行时,会正确生成源 XML 文档和样式表本身的 URL

file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xml
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xsl

相关内容

  • 没有找到相关文章

最新更新