我是XSLT的新手,我希望为events
列表生成一个 count 的参与者。这是我的XML:
<events>
<event name="christmas"/>
<event name="halloween"/>
<event name="easter"/>
<event name="easter"/>
</events>
我需要的是这样的事情:
Christmas: 1 participant
Halloween: 1 participant
Easter: 2 participants
这可以通过XSLT以任何方式完成吗?
感谢您的帮助!
答案 0 :(得分:3)
试试这个样式表,它使用 Muenchian Method 按event
对@name
元素进行分组:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<!-- based on
http://stackoverflow.com/a/16509871/2115381
from Dimitre Novatchev
-->
<xsl:key name="kEventVal" match="event" use="@name"/>
<xsl:template match="*">
<xsl:apply-templates select=
"event[generate-id() = generate-id(key('kEventVal',@name)[1])]"/>
</xsl:template>
<xsl:template match="event">
<xsl:value-of select="@name"/>
<xsl:text>: </xsl:text>
<xsl:value-of select="count(key('kEventVal',@name))"/>
<xsl:text> participant</xsl:text>
<xsl:if test="count(key('kEventVal',@name)) > 1 ">
<xsl:text>s</xsl:text>
</xsl:if>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
将生成以下输出:
christmas: 1 participant
halloween: 1 participant
easter: 2 participants