如何将此XML输出为排名

  • 本文关键字:输出 XML xml xslt xslt-1.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中是可能的吗?

谢谢你的帮助!

在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选择只为每个source值取出第一个booking元素。

相关内容

  • 没有找到相关文章

最新更新