2014-10-28 70 views
0

我想爲每個CDS/CD節點在COMS級別的輸入XML中添加值。問題是我想只能爲ID爲'A'或'B'的標籤完成總和。標籤'C'下的值不應該在總和中計算。使用XSLT代碼添加特定XML標記

<?xml version="1.0"?> 
    <root> 
    <CDS> 
      <CD> 
        <COMS> 
          <COMP> 
          <ID>A</ID> 
          <VAL>1.220</VAL> 
         </COMP> 
         <COMP> 
          <ID>B</ID> 
          <VAL>2.220</VAL> 
         </COMP> 
          <COMP> 
          <ID>C</ID> 
          <VAL>5.220</VAL> 
         </COMP> 
        </COMS> 

      </CD> 
    </CDS> 
    <CDS> 
      <CD> 
        <COMS> 
          <COMP> 
          <ID>A</ID> 
          <VAL>5.2</VAL> 
         </COMP> 
         <COMP> 
          <ID>B</ID> 
          <VAL>6.5</VAL> 
         </COMP> 
          <COMP> 
          <ID>C</ID> 
          <VAL>10.5</VAL> 
         </COMP> 
        </COMS> 

      </CD> 
    </CDS> 
    <CDS> 
      <CD> 
        <COMS> 
          <COMP> 
          <ID>A</ID> 
          <VAL>4.2</VAL> 
         </COMP> 
         <COMP> 
          <ID>B</ID> 
          <VAL>5.8</VAL> 
         </COMP> 
          <COMP> 
          <ID>C</ID> 
          <VAL>14.8</VAL> 
         </COMP> 
        </COMS> 

      </CD> 
    </CDS> 

輸出XML:

<CDS> 
      <CD> 
        <COMS> 
          <COMP> 
            <SUM_VALUE>3.44</SUM_VALUE> 
          </COMP> 
        </COMS> 
      </CD> 
      <CD> 
        <COMS> 
          <COMP> 
            <SUM_VALUE>11.7</SUM_VALUE> 
          </COMP> 
        </COMS> 
      </CD> 
      <CD> 
        <COMS> 
           <COMP> 
            <SUM_VALUE>10</SUM_VALUE> 
          </COMP> 
        </COMS> 
      </CD> 
    </CDS>   

我的XSLT代碼只試圖總結所有的值,並給出了最終的輸出。如果有人可以解釋如何在for:each循環中爲各個comp級別求和xml值,這將會很有幫助。

我最初跟這行代碼嘗試,但它增加了所有的值

+0

您是否嘗試過使用內建求和函數? http://msdn.microsoft.com/en-us/library/ms256160(v=vs.110).aspx我不知道如何解決'C's與它tho – molbal 2014-10-28 09:14:39

+0

內置函數sum()工程但它將所有標籤加起來。我只想要低於'A'和'B'而不是'C'的xml標籤的總和。 – Anirudh 2014-10-28 09:17:25

+0

我想你可以用一個XPAth表達式來解決這個問題,就像Jerringon的答案一樣 – molbal 2014-10-28 09:18:41

回答

1

您可以在SUM函數指定節點過濾(我假設你目前使用的)。例如:

<xsl:value-of select="sum(COMP[ID = 'A' or ID = 'B']/VAL)"/>