【问题标题】:how to evaluate variables in xslt messages when run on MarkLogic在 MarkLogic 上运行时如何评估 xslt 消息中的变量
【发布时间】:2016-09-04 08:03:29
【问题描述】:

我有一个在 Marklogic 中评估的 xslt(通过 xdmp:xslt-invoke)。我正在尝试评估 xsl:message 标记内的变量,但是,当 Marklogic 遇到消息时,它不会评估变量,而只是显示其中的文本。

例如:

<xsl:template match="/">
    <xsl:variable name="x" select="//xpath"/>
    <xsl:message terminate="yes">Terminating <xsl:value-of select="$x"/></xsl:message>        
</xsl:template>

评估时,我在输出中看到类似这样的内容:

[XSLT] XSLT-MSGTERMINATE: (err:XTMM9000)<xsl:message terminate="yes"><xsl:text>"Terminating "</xsl:text><xsl:value-of select="$x"/><xsl:text>"&#10; />"</xsl:text></xsl:message> -- xsl:message instruction called with terminate

有没有办法在消息中实际评估和显示 $x 的值?

【问题讨论】:

    标签: xml xslt marklogic marklogic-8


    【解决方案1】:

    虽然xsl:message terminate="yes" 没有评估变量。我能够以下列方式通过xdmp:eval 评估变量,并将终止消息显示为fn:error

    <xsl:template match="//some xpath condition">
        <xsl:variable name="x" select="//someXpath string value"/>
            <xsl:message terminate="yes">
            <xsl:value-of
                select="
                    xdmp:eval(concat(
                    'xquery version ''1.0-ml'';',
                    'let $message := concat(''Terminating with value ''', ',', '''', $x, ''')',
                    'let $_error := error(xs:QName(''Error''), $message)',
                    'return $_error'
                    ))"
            /></xsl:message></xsl:template>
    

    以下xdmp:eval 将正确评估$x 变量值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2010-11-10
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多