我有一个在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>" />"</xsl:text></xsl:message> -- xsl:message instruction called with terminate
有没有办法在消息中实际评估和显示$ x的值?
答案 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
变量值。