Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将此XML输出为排名?_Xml_Xslt_Xslt 1.0 - Fatal编程技术网

如何将此XML输出为排名?

如何将此XML输出为排名?,xml,xslt,xslt-1.0,Xml,Xslt,Xslt 1.0,我有以下XML: <bookings> <booking> <event>Christmas Party</event> <source>Internet</source> </booking> <booking> <event>Church day</event> <source>Television</sou

我有以下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>

圣诞晚会
互联网
教会日
电视机
港口周年纪念
电视机
油脂曱甴
互联网
派对之夜
互联网
圣诞晚会
传单
我需要这样输出它:

预订的主要营销来源:

  • 互联网:3次预订
  • 电视:2个预约
  • 传单:1张预订
  • 这在XSLT中是可能的吗


    谢谢你的帮助

    XSLT1.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 select只为每个
    值提取第一个
    booking
    元素。

    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 select只为每个
    值提取第一个
    booking
    元素。

    您是否尝试过使用XSL?您从哪里获得预订量?呃,对不起。知道了。忽略我的第二个问题;)您是否尝试过使用XSL?您从哪里获得预订量?呃,对不起。知道了。忽略我的第二个问题;)需要一个小的扩展名:
    以获得预期的输出。@hr_117我的意思是使用
    (自动编号)而不是
    。我现在已经解决了这个问题。需要一个小扩展:
    以获得预期的输出。@hr_117我的意思是使用
    (自动编号)而不是
    。我现在已经修好了。