2013-05-16 133 views
1

感謝的Nirajhr_117我能在那打開此XML的XSL模板來幫助...如何提高我的Muenchian分組XSLT?

<bookings> 
    <entry> 
    <event>Christmas</event> 
    <attendees>2</attendees> 
    </entry> 
    <entry> 
    <event>Halloween</event> 
    <attendees>2</attendees> 
    </entry> 
    <entry> 
    <event>Easter</event> 
    <attendees>1</attendees> 
    </entry> 
    <entry> 
    <event>Easter</event> 
    <attendees>1</attendees> 
    </entry> 
</bookings> 

...這個輸出:

聖誕節:1預約(或多個)

萬聖節:1預訂(S)

復活節:2預訂(S)

這是我的XSL:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="data"> 
    <xsl:apply-templates select="bookings"/> 
</xsl:template> 

<xsl:key name="bookings-within-period" match="bookings/entry" use="event" /> 

<xsl:template match="bookings"> 
    <xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]"> 
     <p> 
      <xsl:value-of select="concat(event,': ')" /> 
      <xsl:value-of select="count(key('bookings-within-period', event))" /> 
      <xsl:text> booking(s)</xsl:text>   
     </p> 
    </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 

我怎樣才能得到這個功能來計算總和attendees以及

這是輸出我需要:

聖誕節:1預訂(S),2參加者(S)

萬聖節:1預訂(S),2參加者(S)

復活節:2預訂(S),2與會者(S)

感謝任何人誰可以幫助!

回答

2

增強XSLT是爲下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="data"> 
    <xsl:apply-templates select="bookings"/> 
    </xsl:template> 

    <xsl:key name="bookings-within-period" match="bookings/entry" use="event" /> 

    <xsl:template match="bookings"> 
    <xsl:for-each select="entry[count(. | key('bookings-within-period', event)[1]) = 1]"> 
     <p> 
     <xsl:value-of select="concat(event,': ')" /> 
     <xsl:value-of select="count(key('bookings-within-period', event))" /> 
     <xsl:text> booking(s), </xsl:text> 
     <xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" /> 
     <xsl:text> attendee(s)</xsl:text> 
     </p> 
    </xsl:for-each> 
    </xsl:template> 

</xsl:stylesheet> 

,我們有<xsl:value-of select="sum(key('bookings-within-period', event)/attendees)" />總結所有與會者

+0

非常好,非常感謝!最後一件事:假設每個''也有一個''節點。是否有可能按日期對輸出進行排序呢? – Tintin81

3

使用key('bookings-within-period', event)爲您提供了各組的entry元素,然後sum(key('bookings-within-period', event)/attendees)給你attendees的各組的總和。

而且您需要在for-each內部這樣做,其中每個組中的第一個entry元素是上下文節點,以防不清楚。

+0

感謝。我以爲我曾嘗試過,但事實證明,我看不到所有樹木的木材。我剛剛扔了一枚硬幣,納維贏了,所以我將他的答案標記爲正確的;-) – Tintin81