2013-05-13 49 views
1

我對XSLT相當陌生,我想爲events列表生成參與者的計數。這是我的XML:如何計算XSLT中的條目?

<events> 
    <event name="christmas"/> 
    <event name="halloween"/> 
    <event name="easter"/> 
    <event name="easter"/> 
</events> 

我需要的是這樣的:

Christmas: 1 participant 
Halloween: 1 participant 
Easter: 2 participants 

這能以任何方式與XSLT做了什麼?

感謝您的幫助!

回答

3

通過@name試試這個樣式表,它使用Muenchian Method到組event元素:

<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 
+0

謝謝!將嘗試。只有一個問題:「'做了什麼?那是一種外部插件嗎? – Tintin81 2013-05-13 10:59:53

+0

這是兩個問題。 ;-) 1.這會生成類似於以屬性名稱爲鍵的映射和所有匹配的事件元素作爲值的列表。 (比如看看http://www.w3schools.com/xsl/el_key.asp。2.不需要插件或擴展。這個xslt-1.0。 – 2013-05-13 11:08:36

+0

http://www.w3.org/TR/xslt#關鍵 – 2013-05-13 14:00:48