1

多亏了Nirajhr_117的帮助,我才能够得到一个 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>

...进入这个输出:

圣诞节: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>

我怎样才能得到这个函数来计算总和attendees

这是我需要的输出:

圣诞节:1 次预订,2 名参加者

万圣节:1 次预订,2 名参加者

复活节:2 位预订,2 位参加者

感谢任何可以提供帮助的人!

4

2 回答 2

3

使用key('bookings-within-period', event)为您提供entry每组中的元素,然后sum(key('bookings-within-period', event)/attendees)为您提供每组中的总和attendees

您需要在每个组for-each中的第一个entry元素是上下文节点的地方执行此操作,以防不清楚。

于 2013-05-16T10:10:31.377 回答
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)" />总结所有与会者

于 2013-05-16T10:14:46.187 回答