首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何输出这个XML作为排名?

如何输出这个XML作为排名?
EN

Stack Overflow用户
提问于 2013-05-17 10:12:50
回答 1查看 163关注 0票数 0

我有一个XML:

代码语言:javascript
复制
<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甚至有可能做到这一点吗?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-17 10:23:22

XSLT1.0中这类问题的通常答案是Muenchian分组。首先定义一个键

代码语言:javascript
复制
<xsl:key name="bookingsBySource" match="booking" use="source" />

然后使用下面的技巧来迭代唯一的源值

代码语言:javascript
复制
<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 -每个选择只为每个booking值提取第一个source元素。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16606557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档