2012-07-26 112 views
1

我有以下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> 

试图在转换到以下格式

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

示例结果的一个HTML表 -

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组的项目id的值的总和..

感谢您的帮助!

+0

已更新,对不起...混乱... – Sr7 2012-07-26 01:56:06

回答

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 
+0

感谢您的回复,但我需要获得这些项目的值的总和。 itemList具有多个关联的项目,XML底部的每个项目都具有与其关联的值。所以我想获得每个itemList中的那些项目的值..对不起,如果我原来的问题是令人困惑的... – Sr7 2012-07-26 01:47:46

+0

预期结果 ItemList - 43.00 ItemList - 42.00等 – Sr7 2012-07-26 01:51:38

+0

@ Sr7:请编辑*问题并清楚说明。 – 2012-07-26 01:53:08