我有以下XSL样式表:计数由<调用模板>返回元素的数量
<xsl:stylesheet xmlns="http://www.w3.org/1999/xhtml" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8"/>
<xsl:template match="/">
<xsl:variable name="elements">
<xsl:call-template name="get-some-nodes"/>
</xsl:variable>
<root>
<values>
<xsl:copy-of select="$elements"/>
</values>
<count>
<xsl:value-of select="count($elements)"/>
</count>
</root>
</xsl:template>
<xsl:template name="get-some-nodes">
<node>1</node>
<node>2</node>
<node>3</node>
</xsl:template>
</xsl:stylesheet>
(它不应该不管你申请什么XML它,它会生成自己的数据)。
的这本(使用xsltproc的)的结果是:
<?xml version="1.0" encoding="utf-8"?>
<root xmlns="http://www.w3.org/1999/xhtml" xmlns:set="http://exslt.org/sets">
<values>
<node>1</node>
<node>2</node>
<node>3</node>
</values>
<count>1</count>
</root>
鉴于所谓的模板返回三个节点,我希望“计数($元素)”为3,但它是一个。我怀疑也许结果被包装在某种根节点,但任何尝试计数($ elements/*)或类似失败,我相信因为$元素是一个结果树片段,而不是一个节点集。
我无法获得exslt或xslt2.0的任何好东西,当然有一种方法可以获得存储在变量中的节点的数量吗?
我也很乐意计算调用模板返回的节点而不使用中间变量,但我不明白这怎么可能。
好问题,1。请参阅我的答案以获取详细的解释和解决方案 – 2010-11-15 23:29:23