首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪些xsl对日期范围内的元素求和?

哪些xsl对日期范围内的元素求和?
EN

Stack Overflow用户
提问于 2012-12-15 01:49:28
回答 1查看 185关注 0票数 1

xml摘录( http://pastebin.com/HDrmzctC上的完整示例xml ):

代码语言:javascript
复制
<log>
  <event>
    <when>2012-10-26T21:32:52</when>
    <what>
      <item>food</item>
      <money>10</money>
    </what>
  </event>
  <event>
    <when>2012-10-26T21:32:52</when>
    <what>
      <item>beer</item>
      <money>20</money>
    </what>
  </event>
  <event>
    <when>2012-10-27T21:32:52</when>
    <what>
      <item>food</item>
      <money>10</money>
    </what>
  </event>
  <event>
    <when>2012-10-27T21:32:52</when>
    <what>
      <item>beer</item>
      <money>20</money>
    </what>
  </event>

  <event>
    <when>2012-11-26T21:32:52</when>
    <what>
      <item>food</item>
      <money>11</money>
    </what>
  </event>
  <event>
    <when>2012-11-26T21:32:52</when>
    <what>
      <item>beer</item>
      <money>22</money>
    </what>
  </event>
  <event>
    <when>2012-11-27T21:32:52</when>
    <what>
      <item>food</item>
      <money>11</money>
    </what>
  </event>
  <event>
    <when>2012-11-27T21:32:52</when>
    <what>
      <item>beer</item>
      <money>22</money>
    </what>
  </event>

</log>

所需输出:

2012-10食品20

2012-10啤酒40

2012-11食品22

2012-11年度啤酒44

或者是因为xml的设计错误,所以xsl并不简单?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-15 02:14:36

此转换

代码语言:javascript
复制
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:key name="kEventByDateItem" match="event"
      use="concat(substring(when, 1,7), '+', what/item)"/>

 <xsl:template match=
  "event
     [generate-id()
     =
      generate-id(key('kEventByDateItem',
                       concat(substring(when, 1,7), '+', what/item)
                       )[1]
                  )
      ]">
     <xsl:value-of select="concat('&#xA;',substring(when, 1,7), ' ', what/item, ' ')"/>
     <xsl:value-of select=
      "sum(key('kEventByDateItem',
             concat(substring(when, 1,7), '+', what/item)
             )/what/money)"/>
 </xsl:template>
 <xsl:template match="text()"/>
</xsl:stylesheet>

在所提供的XML文档上应用时的

代码语言:javascript
复制
<log>
  <event>
    <when>2012-10-26T21:32:52</when>
    <what>
      <item>food</item>
      <money>10</money>
    </what>
  </event>
  <event>
    <when>2012-10-26T21:32:52</when>
    <what>
      <item>beer</item>
      <money>20</money>
    </what>
  </event>
  <event>
    <when>2012-10-27T21:32:52</when>
    <what>
      <item>food</item>
      <money>10</money>
    </what>
  </event>
  <event>
    <when>2012-10-27T21:32:52</when>
    <what>
      <item>beer</item>
      <money>20</money>
    </what>
  </event>

  <event>
    <when>2012-11-26T21:32:52</when>
    <what>
      <item>food</item>
      <money>11</money>
    </what>
  </event>
  <event>
    <when>2012-11-26T21:32:52</when>
    <what>
      <item>beer</item>
      <money>22</money>
    </what>
  </event>
  <event>
    <when>2012-11-27T21:32:52</when>
    <what>
      <item>food</item>
      <money>11</money>
    </what>
  </event>
  <event>
    <when>2012-11-27T21:32:52</when>
    <what>
      <item>beer</item>
      <money>22</money>
    </what>
  </event>

</log>

会生成想要的正确结果:

代码语言:javascript
复制
2012-10 food 20
2012-10 beer 40
2012-11 food 22
2012-11 beer 44

说明

正确使用带有组合键的。

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

https://stackoverflow.com/questions/13883795

复制
相关文章

相似问题

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