如何计算XSLT中的条目?

时间:2013-05-13 09:59:27

标签: xml xslt xslt-1.0 symphony-cms

我是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以任何方式完成吗?

感谢您的帮助!

1 个答案:

答案 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>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

将生成以下输出:

christmas: 1 participant
halloween: 1 participant
easter: 2 participants