鉴于以下示例,
https://xsltfiddle.liberty-development.net/3NzcBsV
每个描述必须只出现一次。 如何在输出报告的第一行中添加在所讨论的xml文件中多次出现的描述元素的数量?
期望的输出:
3 (because "Light Belgian waffles covered with an assortment of fresh berries and whipped cream" was found 2 times, and "Two of our famous Belgian Waffles with plenty of real maple [syrup]" was found 3 times, thus 1+2=3 )
02 Light Belgian waffles covered with an assortment of fresh berries and whipped cream 900
04 Light Belgian waffles covered with an assortment of fresh berries and whipped cream 100
01 Two of our famous Belgian Waffles with plenty of real maple [syrup] 650
01 Two of our famous Belgian Waffles with plenty of real maple [syrup] 350
05 Two of our famous Belgian Waffles with plenty of real maple [syrup] 250
答案 0 :(得分:0)
将分组的元素存储到容器元素中,并计算不同组的项目(或根据您的需要从该计数中减去一个):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0">
<xsl:output method="text" />
<xsl:template match="breakfast_menu">
<xsl:variable name="groups">
<xsl:for-each-group select="food" group-by="description">
<xsl:sort select="current-grouping-key()"/>
<xsl:if test="current-group()[2]">
<group key="{current-grouping-key()}">
<xsl:copy-of select="current-group()"/>
</group>
</xsl:if>
</xsl:for-each-group>
</xsl:variable>
<xsl:value-of select="sum($groups/group!(count(food) - 1))"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="$groups/group/food"/>
</xsl:template>
<xsl:template match="food">
<xsl:value-of select="name, description, string(calories)" separator="	"/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>