2016-05-09 2 views
3

У меня есть xslt, который оценивается в Marklogic (через xdmp:xslt-invoke). Я пытаюсь оценить переменную внутри тега xsl:message, однако, когда Marklogic встречает это сообщение, он не оценивает переменную, а просто отображает текст внутри нее.Как оценивать переменные в сообщениях xslt при запуске на 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 

Есть ли способ, чтобы действительно оценить и отобразить значение $ х в сообщение?

ответ

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 значение переменной.