为了使用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的specified。
然而,当我使用fn:document-uri
时,我的XSLT引擎告诉我,我调用了一个未知函数/扩展名:
<xsl:variable name="uri" select="fn:document-uri()" />
Opera说:
此文档包含无效的XSLT样式表。来自XSLT引擎的错误消息:
错误:XPath表达式编译失败:fn:document-uri()
详细信息:编译错误(字符1-17,“fn:document-uri()”):名为“{http://www.w3.org/2005/xpath-functions,document-uri}”的未知函数
Firefox说:
XSLT转换期间出错:调用了一个未知的XPath扩展函数。
由于xslt 2.0,xsltproc
拒绝转换。
那么,如何正确指定fn
命名空间?
答案 0 :(得分:4)
问题是您使用的是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>
</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
答案 1 :(得分:-3)
你可以在php中使用xpath函数 请参考此链接 http://php.net/manual/en/simplexmlelement.xpath.php 我认为此示例对您有用