2017-02-14 33 views
0

首先,我的任务是按提供者名称对元素进行分组,总计数量为@ItemNumber,并计算total = quantity * Price。我无法做出这个计算,我得到错误。这是我迄今为止所做的。任何帮助将不胜感激。我被困在试图计算总和(数量)*价格在xslt 2.0

<?xml version="1.0"?> 
    <Items> 
      <Item ItemNumber="1148089"> 
      <ProductName>Plexi Leather-Silver-Black</ProductName> 
      <ProviderName>Vestal Watches</ProviderName> 
      <Quantity>1</Quantity> 
      <Price>189.99</Price> 
      </Item> 
      <Item ItemNumber="1251465"> 
      <ProductName>Cherub Baby Bottle Kit - Berry</ProductName> 
      <ProviderName>Cherub Baby</ProviderName> 
      <Quantity>3</Quantity> 
      <Price>42.99</Price> 
      </Item> 
      <Item ItemNumber="1351468"> 
      <ProductName>M ES MOC OX BITTER CHOCOLATE</ProductName> 
      <ProviderName>Rockport</ProviderName> 
      <Quantity>7</Quantity> 
      <Price>72.99</Price> 
      </Item> 
      <Item ItemNumber="1151464"> 
      <ProductName>Spritz Grape Seat and Extra Seat</ProductName> 
      <ProviderName>Bambeano</ProviderName> 
      <Quantity>1</Quantity> 
      <Price>56.99</Price> 
      </Item> 
      <Item ItemNumber="1251464"> 
      <ProductName>Apple Pattern T-Shirt-Blue</ProductName> 
      <ProviderName>Avahna</ProviderName> 
      <Quantity>1</Quantity> 
      <Price>14.99</Price> 
      </Item> 
      <Item ItemNumber="1351464"> 
      <ProductName>W ZANA BIKE FRONT OXFORD SATIN NICKEL</ProductName> 
      <ProviderName>Rockport</ProviderName> 
      <Quantity>1</Quantity> 
      <Price>59.99</Price> 
      </Item> 
      <Item ItemNumber="1251464"> 
      <ProductName>Cherub Baby Bottle Kit - Citrus</ProductName> 
      <ProviderName>Cherub Baby</ProviderName> 
      <Quantity>1</Quantity> 
      <Price>42.99</Price> 
      </Item> 
    </Items> 

这是我的XSLT

<xsl:stylesheet version="2.0" 
     xmlns:ex="http://exslt.org/common" 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="Items"> 
     <!-- TODO: Auto-generated template --> 
     <html> 
      <head> 
       <link rel="stylesheet" type="text/css" href="Item.css" /> 
       <title>Sales Amount by Provider</title> 
      </head> 
      <body> 
       <h1>Sales Amount by Provider</h1> 

       <table> 
       <xsl:for-each-group select="Item" group-by="ProviderName"> 
        <xsl:sort select="ProviderName"/> 
        <tr> 
         <th colspan="4">Provider: <xsl:value-of select="ProviderName"/></th> 
        </tr> 

        <tr id="title"> 
         <th>Item Number</th> 
         <th>Quantity</th> 
         <th>Unit Price </th> 
         <th>Total</th> 
        </tr> 
        <xsl:for-each-group select="current-group()" group-adjacent="@ItemNumber"> 
        <xsl:sort select="@ItemNumber"/> 
        <tr> 

         <td> 
          <xsl:value-of select="distinct-values(current-group()/@ItemNumber)"/> 
         </td> 

         <td> 
          <xsl:value-of select="sum(current-group()/Quantity)"/> 
         </td> 

         <td> 
          <xsl:value-of select="distinct-values(current-group()/Price)"/> 
         </td> 
         <td> 
          <xsl:variable name="total"> 
           <xsl:for-each select="current-group()/Item"> 
            <product> 
             <xsl:value-of select="sum(current-group()/Quantity * current-group()/Price)" />  
            </product> 
           </xsl:for-each> 
          </xsl:variable> 
          <xsl:value-of select="sum(ex:node-set($total)/product)"/> 
         </td> 

        </tr> 
        </xsl:for-each-group> 
        <tr> 
         <th id="SubGrandtotal" colspan="3"><b>Sub-total</b></th> 
         <!-- <td> 
          <xsl:value-of select="sum(current-group()/Price)"/> --> 
          <!-- <xsl:variable name="quantity" select="sum(current-group()/Quantity)" as="xs:double" /> 
          <xsl:variable name="price" select="current-group()/Price/text()" /> 
          <xsl:value-of select="format-number($price*$quantity, '#0.00')"/> --> 
         <!-- </td> --> 

        </tr> 

       </xsl:for-each-group> 
        <tr> 
         <th id="SubGrandtotal" colspan="3"><b>Grand-total</b></th> 
        </tr> 
       </table> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 
+1

那么,您获得发布的代码到底是哪个错误?对于哪些代码行?你为什么试图在XSLT 2.0中使用'ex:node-set'? –

回答

0

如果您使用XSLT 2.0,那么你可以简单地使用:

<xsl:value-of select="sum(current-group()/(Quantity * Price))" /> 

两个分组级别,并且:

<xsl:value-of select="sum(Item/(Quantity * Price))" /> 

为总计。

+0

谢谢米歇尔,它真的帮助了我,现在它工作 –