2015-11-20 54 views
0

我正在嘗試編寫XSL(1.0)以遞歸方式從節點添加值。我已經使用Google,只要節點是父/子,似乎就有功能添加。除此之外,我的節點還有幾個步驟。例如,我有:XML遞歸在父節點之外添加

<Document> 
    <Finance> 
    <Account> 
     <Type>Expense</Expense> 
     <Amount>25</Amount> 
    </Account> 
    </Finance 
</Document> 
<Document> 
    <Finance> 
    <Account> 
     <Type>Capital</Type> 
     <Amount>75</Amount> 
    </Account> 
    </Finance 
</Document> 
<Document> 
    <Finance> 
    <Account> 
     <Type>Expense</Type> 
     <Amount>50</Amount> 
    </Account> 
    </Finance 
</Document> 

我需要通過添加所有這些數量來獲得總計150的變量或東西。 注意。這不是確切的結構,但我簡化了它。每個文檔的節點都是相同的。 我一直在尋找的基本上是做一個辦法: I = 0 然後循環與我加起來= I + 1

好像這是一件應該很容易。

我什至想到也許能夠爲每個和創建一個表,只有兩列,然後使用它來加起來,但我找不到方法。所以我正在尋找賬戶類型和總的運行金額: 費用= 75 資本= 75

+0

你能告訴我們你的代碼嗎? – zeeMonkeez

+0

「*我一直在尋找一種基本上做的方式:i = 0然後循環加上i = i + 1 *」這不是你在XSLT中的做法。這實際上是一個關於*分組*的問題 - 從這裏開始:http://www.jenitennison.com/xslt/grouping/muenchian.html –

回答

1

如果類別(費用,資本)是恆定的並且事先已知,您可以簡單地依次求和。下面是一個簡單的例子:

XML

<root> 
    <Document> 
     <Finance> 
     <Account> 
      <Type>Expense</Type> 
      <Amount>25</Amount> 
     </Account> 
     </Finance> 
    </Document> 
    <Document> 
     <Finance> 
     <Account> 
      <Type>Capital</Type> 
      <Amount>100</Amount> 
     </Account> 
     </Finance> 
    </Document> 
    <Document> 
     <Finance> 
     <Account> 
      <Type>Expense</Type> 
      <Amount>50</Amount> 
     </Account> 
     </Finance> 
    </Document> 
</root> 

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" omit-xml-declaration="yes" version="1.0" encoding="utf-8" indent="yes"/> 

<xsl:key name="tx-by-type" match="Account" use="Type" /> 

<xsl:template match="/root"> 
    <table border="1"> 
     <tr> 
      <th>Expense</th> 
      <th>Capital</th> 
      <th>Total</th> 
     </tr> 
     <tr> 
      <xsl:variable name="total-expense" select="sum(key('tx-by-type', 'Expense')/Amount)" /> 
      <xsl:variable name="total-capital" select="sum(key('tx-by-type', 'Capital')/Amount)" /> 
      <td> 
       <xsl:value-of select="$total-expense" /> 
      </td> 
      <td> 
       <xsl:value-of select="$total-capital" /> 
      </td> 
      <td> 
       <xsl:value-of select="$total-expense + $total-capital" /> 
      </td> 
     </tr> 
    </table> 
</xsl:template> 

</xsl:stylesheet> 

結果

<table border="1"> 
    <tr> 
     <th>Expense</th> 
     <th>Capital</th> 
     <th>Total</th> 
    </tr> 
    <tr> 
     <td>75</td> 
     <td>100</td> 
     <td>175</td> 
    </tr> 
</table> 

enter image description here