考虑以下 XSLT 2.0 模板
<xsl:template match="/">
<xsl:variable name="var1">
<elem>1</elem>
<elem>2</elem>
<elem>3</elem>
</xsl:variable>
<xsl:text>var1 has </xsl:text>
<xsl:value-of select="count($var1)"/>
<xsl:text>elements.
</xsl:text>
<xsl:variable name="var2" select="$var1/elem[position() > 1]"/>
<xsl:text>var2 has </xsl:text>
<xsl:value-of select="count($var2)"/>
<xsl:text>elements.
</xsl:text>
</xsl:template>
这个模板的输出是
var1 has 1 elements
var2 has 2 elements
第一行输出 1(而不是我最初预期的 3),因为var1
它是一个包含<elem>
子元素的文档片段。现在我的问题:
如何创建不包含文档片段的变量?我可以像我那样做var2
,只是省略了谓词。但也许有一种不使用第二个变量的方法。或者,作为替代方案:如何在过滤掉某些元素的同时将文档片段保留在变量中?
背景信息:我将在递归函数中使用变量内容,该函数检查第一个元素var1
是否符合某些条件。如果满足条件或元素列表为空,则返回一个值。否则它会调用自己并var1
删除第一个元素(就像我在 中所做的那样var2
)。当var1
用作包含文档片段的参数时,我的模板中的 XPath 表达式将不匹配。