如何在MarkLogic上运行时评估xslt消息中的变量

时间:2016-05-09 15:42:41

标签: xml xslt marklogic marklogic-8

我有一个在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的值?

1 个答案:

答案 0 :(得分: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变量值。