2013-05-16 94 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