我对XSLT非常陌生,我想为events
列表生成参与者的计数。这是我的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以任何方式完成吗?
谢谢你的帮助!
试试这个样式表,它使用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