如何在XSLT2.0中使用xpath函数?
为了使用(特别是如何在XSLT2.0中使用xpath函数?,xslt,xpath,xslt-1.0,xslt-2.0,Xslt,Xpath,Xslt 1.0,Xslt 2.0,为了使用(特别是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" > 歌剧说: 此文档的XSLT样式表无效。来自XSLT引
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"
>
歌剧说:
此文档的XSLT样式表无效。来自XSLT引擎的错误消息:错误:XPath表达式编译失败:fn:document-uri() 详细信息:编译错误(字符1-17,“fn:document-uri()”):名为“{,document uri}”的未知函数 Firefox说: XSLT转换期间出错:调用了未知的XPath扩展函数 而
xsltproc
拒绝转换,因为XSLT2.0
那么,如何正确地指定
fn
名称空间呢?问题是,您使用的是XSLT 1.0处理器,而XSLT 1.0处理器不知道(而且一定不知道)有关XPath 2.0函数的任何信息
如果使用真正的XSLT2.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>
</xsl:text>
<xsl:sequence select="document-uri(document(''))" />
</xsl:template>
</xsl:stylesheet>
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xml
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xsl
Bitmask,我的回答是否提供了你想要的信息,或者你对此仍有疑问?@DimitreNovatchev:从技术上讲,你有,但解决办法会很好(尽管我认为这是不可能的)。这就是为什么我把问题留了一段时间,我确实清楚地说,符合XSLT1.0的处理器不能实现XPath2.0函数。这显然意味着没有“变通办法”——如果需要XSLT中的XPath2.0,则必须使用XSLT2.0(或更高版本)处理器。
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xml
file:/C:/Program%20Files/Java/jre6/bin/marrowtr.xsl