Xml 如何改进我的慕尼黑分组XSLT?

Xml 如何改进我的慕尼黑分组XSLT?,xml,xslt,xslt-1.0,muenchian-grouping,Xml,Xslt,Xslt 1.0,Muenchian Grouping,感谢和的帮助 我能够得到一个XSL模板,它将这个XML <bookings> <entry> <event>Christmas</event> <attendees>2</attendees> </entry> <entry> <event>Halloween</event> <attendees>2</attend

感谢和的帮助 我能够得到一个XSL模板,它将这个XML

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

圣诞节
2.
万圣节前夕
2.
复活节
1.
复活节
1.
…输入此输出:

圣诞节:1次预订

万圣节:1次预订

复活节:2次预订

这是我的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>


预订

如何使用此函数来计算
与会者的

这是我需要的输出:

圣诞节:1个预订,2个与会者

万圣节:1人预订,2人参加

复活节:2个预订,2个与会者

谢谢任何能帮忙的人

使用
key('bookings-in-period',event)
为您提供每个组中的
条目
元素,然后
sum(key('bookings-in-period',event)/attenders)
为您提供每个组中
与会者的总和

您需要在每个
中执行此操作,其中每个组中的第一个
条目
元素是上下文节点,以防不清楚。

使用
键('bookings-in-period',event)
为您提供每个组中的
条目
元素,然后
求和(key('bookings-in-period',event)/attenders)
为您提供每组
与会者的总数


您需要在
中为每个
执行此操作,其中每个组中的第一个
条目
元素是上下文节点,以防不清楚。

增强型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>


预订,
与会者


其中,我们对所有与会者进行了总结,增强的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>


预订,
与会者


我们有
来总结所有与会者

非常好,非常感谢!最后一件事:假设每个
也有一个
节点。那么可以按日期对输出进行排序吗?太好了,非常感谢!最后一件事:假设每个
也有一个
节点。那么可以按日期对输出进行排序吗?谢谢。我想我以前试过,但结果我看不到所有的树都是木头。我刚刚扔了一枚硬币,纳文赢了,所以我把他的答案标记为正确的;-)谢谢我想我以前试过,但结果我看不到所有的树都是木头。我刚刚扔了一枚硬币,纳文赢了,所以我把他的答案标记为正确的;-)