Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在XSLT2.0中使用xpath函数?_Xslt_Xpath_Xslt 1.0_Xslt 2.0 - Fatal编程技术网

如何在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>&#xA;</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