1

以下代码给出了错误:

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

但是,如果我将其更改xsl:element<xsl:element name="yyyXXX">它表明它在 value-of 中看到$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/> })
4

1 回答 1

5

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

于 2012-01-18T19:03:44.033 回答