2013-08-30 103 views
0

我一直在撞牆上撞了我一會兒。我們的應用程序處理來自另一個系統的複雜結構XML發票。發票包含包含各種計數的信息行。這些計數可能包含或不包含一個值。有一個全面的文件費用。我們需要制定單位收費。公式將是總成本除以總數。XSLT 1.0高級計算

我一直在研究其他人友善地提供的關於在XSLT1.0中求和的例子。我可以使用xsl:call-template獲取計數總和,但我不知道如何將結果應用於計算單位價格。

示例XML

<Document> 
    <Row> 
     <Count1> 
      <Value>10</Value> 
     </Count1> 
     <Count2> 
      <Value/> 
     </Count2> 
    </Row> 
    <Row> 
     <Count1> 
      <Value>5</Value> 
     </Count1> 
     <Count2> 
      <Value>6</Value> 
     </Count2> 
    </Row> 
    <Row> 
     <Count1> 
      <Value>2</Value> 
     </Count1> 
     <Count2> 
      <Value>3</Value> 
     </Count2> 
    </Row> 
    <Charge> 
     <Value>260</Value> 
    </Charge> 
</Document> 

如果我能看到如何得到下面的XML輸出可能會告訴我我需要什麼。

<Document> 
    <Row> 
     <Total>10</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
    <Row> 
     <Total>11</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
    <Row> 
     <Total>15</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
</Document> 

很多感謝

+1

很想幫助 - 但您需要發佈您嘗試過的XSL並澄清目標。 – technophobia

回答

0

你只需要調用所需的值sum(),就像這樣:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/Document"> 
    <Document> 
     <xsl:apply-templates select="Row"/> 
    </Document> 
    </xsl:template> 
    <xsl:template match="Row"> 
    <Row> 
     <Total> 
      <xsl:value-of select="sum(./*[Value&gt;0]/Value)"/> 
     </Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
    </xsl:template> 
</xsl:stylesheet> 

這使輸出:

<Document> 
    <Row> 
     <Total>10</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
    <Row> 
     <Total>11</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
    <Row> 
     <Total>5</Total> 
     <UnitPrice>10</UnitPrice> 
    </Row> 
</Document>