为什么不在元素声明中看到变量?

Din*_*llu 1 xslt marklogic

以下代码给出了错误:

[1.0-ml] XDMP-UNDVAR: (err:XPST0008) Undefined variable $ename
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改xsl:element<xsl:element name="yyyXXX">它,则表明它在值中看到$ ename,即

<yyyXXX>zzz</yyyXXX>

下面的样式表在Saxonica 9.x中运行得很好

谢谢.


xquery version "1.0-ml";

xdmp:xslt-eval(
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:xdmp="http://marklogic.com/xdmp"        
   extension-element-prefixes="xdmp"
    version="2.0">     

 <xsl:template match="/">
  <xsl:variable name="ename" select="'zzz'"/>
  <xsl:element name="yyy{$ename}">       
   <xsl:value-of select="$ename"/>
  </xsl:element>
 </xsl:template>
</xsl:stylesheet>
,document{ <doc/> })
Run Code Online (Sandbox Code Playgroud)

Jus*_*eig 5

你的元素名称周围需要两组花括号,例如yyy{{$ename}}.这告诉外部XQuery将它们视为XSLT中的文字大括号.如果您从外部文档(例如xdmp:xslt-invoke)中调用XSLT,则不需要额外的括号; 这相当于你的撒克逊测试.评估XQuery以动态创建XSLT的能力非常强大,但确实会增加一点认知开销.