我有以下xml:
<pax>
<age>5</age>
</pax>
<pax>
<age>5</age>
</pax>
<pax>
<age>12</age>
</pax>
以及以下 xslt:
<xsl:for-each select="paxes/pax">
<xsl:variable name="PaxAge" select="age"/>
<COUNT>
<xsl:value-of select='count(paxes/pax/age[text()=$PaxAge])'/>
</COUNT>
</xsl:for-each>
但是,我得到的结果总是
<COUNT>0</COUNT>
<COUNT>0</COUNT>
<COUNT>0</COUNT>
如果我将其更改为
<xsl:value-of select='count(paxes/pax/age[text()="5"])'/>
我将收到
<COUNT>2</COUNT>
<COUNT>2</COUNT>
<COUNT>2</COUNT>
输出应为:
<COUNT>2</COUNT>
<COUNT>1</COUNT>
如何获取每次迭代的写入计数?
假设您正在尝试计算应该可以工作的出现次数,
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="age" match="/paxes/pax/age" use="." />
<xsl:template match="/">
<xsl:for-each select="paxes/pax/age[generate-id(.) = generate-id(key('age', .)[1])]">
<COUNT>
<!-- optional -->
<xsl:attribute name="age">
<xsl:value-of select="."/>
</xsl:attribute>
<xsl:value-of select="count(key('age',.))"/>
</COUNT>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应该给出一个XML,如下所示:
<COUNT age="5">2</COUNT>
<COUNT age="12">1</COUNT>
您说您希望每个不同的年龄值在输出中都有一个 COUNT 元素。这使它成为一个分组查询。因此,在 XSLT 2.0 中,可以使用分组查询:
<xsl:for-each-group select="paxes/pax/age" group-by=".">
<COUNT><xsl:value-of select="count(current-group())"/></COUNT>
</xsl:for-each-group>
如果您坚持使用 XSLT 1.0,则分组查询要棘手得多,但您可以使用带有键的 Muenchian 分组技术,如 @Rnet 的答案所示。