【问题标题】:XQuery error when doing a xslt transform执行 xslt 转换时出现 XQuery 错误
【发布时间】:2011-04-21 17:36:49
【问题描述】:

我有一个与 saxon 兼容的工作样式表。现在我正在使用简单的 XQuery:

transform:transform($xmlNode, $xslNode, ()),  

为了做同样的事情,它总是抱怨我的样式表中的语法,即:

<xsl:template match="CrossReference ">
     <xsl:variable name="currentNode" select="//*[@Target=@pointer]"/>
     <xsl:if test="$currentNode/name()!= 'Figure'">

            ...
      </xsl:if>
</xsl:template>

它总是抱怨该行,并且消息是“编译样式表时发生异常:未知节点类型:名称”。 好像看不懂函数名()?

有人可以帮忙吗?谢谢。

【问题讨论】:

    标签: xml xslt xpath xquery


    【解决方案1】:

    在 XPath 1.x 中,您不能将函数调用用作路径的一部分(即在斜线 / 之后)。为了解决这个问题,内置的 XPath 函数通常接受一个节点集作为它们的参数,如果省略参数,则默认为 .。也就是说,name()name(.) 的简写。

    试试这个:

    <xsl:if test="name($currentNode) != 'Figure'">
    

    【讨论】:

    • 很好,工作。但我想知道为什么我的原始语法在撒克逊语中有效?
    • 当您在 Saxon 中运行它时,您使用的是 XSLT 2.0 处理器。当您从 XQuery 运行它时,您没有说明您正在运行什么,但错误消息表明它是一个 XSLT 1.0 处理器。在 XSLT 2.0 中允许使用语法 a/name(),但在 1.0 中不允许。否决响应,因为它具有误导性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2018-06-15
    • 1970-01-01
    • 2020-06-13
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多