2013-07-25 96 views
4

我需要應用xsl轉換,該轉換基於其兄弟節點之一的值對某些節點值求和。這裏是我的xml僞代碼:xsl根據節點值求和兄弟

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<Message> 
    <Body> 
     <Order> 
      <Item> 
       <.../> 
       <Type>widget</Type> 
       <Qty>20</Qty> 
       <.../> 
      </Item> 
      <Item> 
       <.../> 
       <Type>gadget</Type> 
       <Qty>10</Qty> 
       <.../> 
      </Item> 
      <Item> 
       <.../> 
       <Type>widget</Type> 
       <Qty>5</Qty> 
       <.../> 
      </Item> 
      <Item/> 
     </Order> 
    </Body> 
</Message> 

的數量總和類型「窗口小部件」的所有項目的期望的結果是25

<xsl:value-of select="sum(/Message/Body/Order/Item/Qty)"/> 

正在產生35點

我的XSL樣式表的詳細信息

xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:fn="http://www.w3.org/2005/xpath-functions" 
version="2.0" 

回答

3

嘗試添加謂詞以找到您感興趣的節點(即'小部件') ly:

<xsl:value-of select="sum(/Message/Body/Order/Item[Type = 'widget']/Qty)"/> 
+0

感謝馮先生,看起來我像往常一樣過於複雜。也許這會幫助別人。 的 [此處輸入鏈路描述] [1] [ 1]:http://www.w3schools.com/XPath/xpath_examples.asp – user1555096

+0

@ user1555096 - 根據您的需要,您可能希望使用'not(Type ='gadget')'而不是'Type!='小工具「'。這樣,如果'Item'沒有'Type',你仍然包含'Qty'。也給+1一個很好的答案。 –