【问题标题】:XPath functions URL with fn prefix does not work带有 fn 前缀的 XPath 函数 URL 不起作用
【发布时间】:2012-04-04 15:40:51
【问题描述】:

遵循 XLST 代码可以正常工作:-

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                version="1.0">
<xsl:template match="/">
    <xsl:for-each select="bookstore/book">
        <xsl:if test="starts-with(author, 'W')">    <!-- Line 1 -->
            <xsl:value-of select="title" />
            &#160; by 
            <xsl:value-of select="author" />
            <br/>
        </xsl:if>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

这里我直接在第1行使用XPath String functionstarts-with()。

现在,根据W3Schools,为 XPath 函数添加命名空间 (http://www.w3.org/2005/xpath-functions),以下代码不起作用:-

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:fn="http://www.w3.org/2005/xpath-functions" version="1.0">
<xsl:template match="/">
    <xsl:for-each select="bookstore/book">
        <xsl:if test="fn:starts-with(author, 'W')">  <!-- Line 2 -->
            <xsl:value-of select="title" />
            &#160; by 
            <xsl:value-of select="author" />
            <br/>
        </xsl:if>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

在这里,我使用的是 XPath 函数,其前缀附加到命名空间。

IE 显示“错误:命名空间 'http://www.w3.org/2005/xpath-functions' 不包含任何函数” 我检查了网址,它确实有功能。

我哪里错了?如果我可以将所有 XPath 函数与 Transform URL 本身一起使用,那么为什么要为 XPath 函数提供单独的 URL?

【问题讨论】:

    标签: xml xslt xpath


    【解决方案1】:

    这是因为 IE 使用的 MSXML 只支持 XPath 1.0。在 XPath/XSLT 1.0 中,不需要为标准 XPath 函数添加前缀。

    【讨论】:

    • 我用 Firefox 尝试了代码。但它显示“调用了未知的 XPath 扩展函数”。而对于 Chrome,似乎没有任何代码可以工作。
    • @HiralJhaveri,带前缀还是不带?
    • "无前缀" 代码在 Firefox 中运行良好。但是带有前缀 [fn:start-with()] 会显示上述错误。
    • @HiralJhaveri,这是因为 Firefox 不支持 XSLT 2.0。您应该避免在 XPath 函数中使用前缀。
    • 即使在 XSLT 2.0 中,也永远不需要使用 fn: 前缀。它只适用于 XQuery,即使在那里,也不需要它,除非您希望将一些不同的函数库设为默认值。
    【解决方案2】:

    现在,根据 W3Schools,为 XPath 函数添加命名空间 (http://www.w3.org/2005/xpath-functions),下面的代码没有 工作:-

    ...

    在这里,我使用的是 XPath 函数,它的前缀附加到 命名空间。

    IE 显示“错误:命名空间 'http://www.w3.org/2005/xpath-functions' 不包含任何 函数”

    尽量避免使用“w3schools”。查看原因:http://w3fools.com/

    您尝试使用的 F & O 名称空间是在 W3C XPath 1.0 和 XSLT 1.0 建议发布多年后创建的。它仅与 XPath 2.0 函数有关,并且此命名空间对于 XPath 1.0/XSLT 1.0 处理器是未知的。

    即使在使用 XPath 2.0/XSLT 2.0 时,也没有必要使用命名空间——任何不带前缀的函数名都被认为是在这个命名空间中。

    解决方案

    不要在任何标准 XPath 函数前面加上前缀。

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 2013-02-03
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      相关资源
      最近更新 更多