计算参考值之和

时间:2012-07-26 01:17:58

标签: xml xslt sum

我有以下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的值总和..

感谢您的帮助!!

1 个答案:

答案 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