Почему он не видит переменную внутри объявления элемента? - PullRequest
1 голос
/ 18 января 2012

Следующий код выдает ошибку:

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

Однако, если я изменю xsl:element на <xsl:element name="yyyXXX">, это показывает, что он видит $ ename в значении of, т.е.

<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 Ответ

5 голосов
/ 18 января 2012

Вам нужно два набора фигурных скобок вокруг имени вашего элемента, например, yyy{{$ename}}.Это говорит внешнему XQuery обрабатывать их как буквальные фигурные скобки в XSLT.Если вы вызываете XSLT из внешнего документа (например, с xdmp:xslt-invoke), вам не понадобятся дополнительные скобки;это эквивалентно вашему саксонскому тесту.Способность оценивать XQuery для динамического создания XSLT довольно мощная, но накладывает немного больше когнитивных издержек.

...