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