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

时间:2012-01-18 11:54:14

标签: xslt marklogic

以下代码给出错误:

[1.0-ml] XDMP-UNDVAR: (err:XPST0008) Undefined variable $ename

但是,如果我将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/> })

1 个答案:

答案 0 :(得分:5)

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