1

xmlの抜粋(http://pastebin.com/HDrmzctCの完全なサンプルxml ):

<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食品202012-10
ビール
402012-11食品
222012-11ビール44

または、xmlが間違って設計されているため、xslは単純ではありませんか?

4

1 に答える 1

1

この変換

<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ドキュメントに適用した場合

<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 food 20
2012-10 beer 40
2012-11 food 22
2012-11 beer 44

説明

複合キーを使用したMuenchianグループ化方法の適切な使用。

于 2012-12-14T18:14:36.307 に答える