0

我有这个 XML:

<bookings>

  <booking>
    <event>Christmas Party</event>
    <source>Internet</source>
  </booking>

  <booking>
    <event>Church day</event>
    <source>Television</source>
  </booking>

  <booking>
    <event>Port Anniversary</event>
    <source>Television</source>
  </booking>

  <booking>
    <event>Disco Fever</event>
    <source>Internet</source>
  </booking>

  <booking>
    <event>Party Night</event>
    <source>Internet</source>
  </booking>

  <booking>
    <event>Christmas Party</event>
    <source>Flyer</source>
  </booking>    

</bookings>

我需要像这样输出它:

预订的主要营销来源:

  1. 互联网:3 次预订
  2. 电视:2 次预订
  3. 传单:1 次预订

使用 XSLT 甚至可能吗?

谢谢你的帮助!

4

1 回答 1

5

XSLT 1.0 中这类事情的通常答案是Muenchian 分组。首先定义一个键

<xsl:key name="bookingsBySource" match="booking" use="source" />

然后使用以下技巧迭代唯一源值

<xsl:template match="/bookings">
  <ol>
    <xsl:for-each select="booking[generate-id() =
            generate-id(key('bookingsBySource', source)[1])]">
      <!-- sort by number of bookings, largest first -->
      <xsl:sort select="count(key('bookingsBySource', source))"
                data-type="number"
                order="descending" />
      <li>
        <xsl:value-of select="source"/>
        <xsl:text>: </xsl:text>
        <xsl:value-of select="count(key('bookingsBySource', source))" />
        <xsl:text> booking(s)</xsl:text>
      </li>
    </xsl:for-each>
  </ol>
</xsl:template>

for-each 选择仅提取每个值的第一个booking元素。source

于 2013-05-17T10:23:22.270 回答