我有以下XML
<?xml version="1.0" encoding="utf-8"?>
<Order>
<Bundle>
<itemList>
<item>
<id>1</id>
</item>
<item>
<id>4</id>
</item>
<item>
<id>5</id>
</item>
</itemList>
<itemList>
<item>
<id>1</id>
</item>
<item>
<id>3</id>
</item>
<item>
<id>5</id>
</item>
</itemList>
<itemList>
<item>
<id>4</id>
</item>
<item>
<id>1</id>
</item>
<item>
<id>3</id>
</item>
</itemList>
</Bundle>
<item>
<id>1</id>
<value>12.00</value>
</item>
<item>
<id>2</id>
<value>13.00</value>
</item>
<item>
<id>3</id>
<value>14.00</value>
</item>
<item>
<id>4</id>
<value>15.00</value>
</item>
<item>
<id>5</id>
<value>16.00</value>
</item>
</Order>
尝试转换为以下格式的html表
--------------------------------
ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >
ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >
ItemList - <Totalvalue of items (value in seperate nodes) in ItemList >
示例结果 -
ItemResult - 44.00 (sum of value of item with id 1 + 4 + 5)
ItemResult - 43.00
etc
这是我开始的XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:template match="/">
<html>
<body>
<table border="1">
<xsl:for-each select="Order/Bundle/itemList">
<tr>
<td>TotalValue</td>
<td><xsl:call-template name="priceSum">
<xsl:with-param name="item" />
</xsl:call-template> </td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
<xsl:template name="priceSum">
<xsl:param name="item"/>
<xsl:value-of select='sum(itemList/item/id/value)'/>
</xsl:template>
</xsl:stylesheet>
我无法获得属于itemlist组的那些item id的值总和..
感谢您的帮助!!
答案 0 :(得分:1)
此转化:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="OrderItemById" match="Order/item" use="id"/>
<xsl:template match="itemList">
ItemList - <xsl:value-of select=
"sum(key('OrderItemById', item/id)/value)"/>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
应用于提供的XML文档:
<Order>
<Bundle>
<itemList>
<item>
<id>1</id>
</item>
<item>
<id>4</id>
</item>
<item>
<id>5</id>
</item>
</itemList>
<itemList>
<item>
<id>1</id>
</item>
<item>
<id>3</id>
</item>
<item>
<id>5</id>
</item>
</itemList>
<itemList>
<item>
<id>4</id>
</item>
<item>
<id>1</id>
</item>
<item>
<id>3</id>
</item>
</itemList>
</Bundle>
<item>
<id>1</id>
<value>12.00</value>
</item>
<item>
<id>2</id>
<value>13.00</value>
</item>
<item>
<id>3</id>
<value>14.00</value>
</item>
<item>
<id>4</id>
<value>15.00</value>
</item>
<item>
<id>5</id>
<value>16.00</value>
</item>
</Order>
会产生想要的正确结果:
ItemList - 43
ItemList - 42
ItemList - 41