Xml 在日期范围内对元素求和的xsl是什么?
xml摘录(完整的xml示例位于):Xml 在日期范围内对元素求和的xsl是什么?,xml,xslt,xslt-1.0,xslt-2.0,Xml,Xslt,Xslt 1.0,Xslt 2.0,xml摘录(完整的xml示例位于): 2012-10-26T21:32:52 食物 10 2012-10-26T21:32:52 啤酒 20 2012-10-27T21:32:52 食物 10 2012-10-27T21:32:52 啤酒 20 2012-11-26T21:32:52 食物 11 2012-11-26T21:32:52 啤酒 22 2012-11-27T21:32:52 食物 11 2012-11-27T21:32:52 啤酒 22 所需输出: 2012-10食品20 201
2012-10-26T21:32:52
食物
10
2012-10-26T21:32:52
啤酒
20
2012-10-27T21:32:52
食物
10
2012-10-27T21:32:52
啤酒
20
2012-11-26T21:32:52
食物
11
2012-11-26T21:32:52
啤酒
22
2012-11-27T21:32:52
食物
11
2012-11-27T21:32:52
啤酒
22
所需输出:2012-10食品20
2012-10啤酒40
2012-11食品22
2012-11啤酒44
还是xsl不简单,因为xml设计错误?此转换:
<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('
',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>
<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>
说明:
<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('
',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>
<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>
使用复合键正确使用。此转换:
<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('
',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>
<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>
说明:
<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('
',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>
<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>
正确使用带有复合键的。Dan,请不要让读者在“某处”使用XML。这次我帮你做了工作——把XML从目的地复制到它所属的正确位置——你的问题。迪米特,谢谢你的修复,我认为它太大了,不能发布。丹,不,它不太大。更重要的是,结构是统一的,因此无论大小,都很容易理解。为了获得问题的所有信息,读者必须看的地方越多越好。Dan,请不要让读者在“某处”使用XML。这次我帮你做了工作——把XML从目的地复制到它所属的正确位置——你的问题。迪米特,谢谢你的修复,我认为它太大了,不能发布。丹,不,它不太大。更重要的是,结构是统一的,因此无论大小,都很容易理解。为了获得问题的所有信息,读者必须看的地方越多越好。