2012-07-30 67 views
0

大家好我需要你的幫助!我一直在研究一個代碼,它將獲得屬於第二級循環的每個唯一產品ID的總重量。這是我使用的代碼。但是我得到的輸出是110,應該只有60。先謝謝你!獲得獨特prodid的總重量

<xforms:bind calculate="sum(instance('Generated')/page1/table1/item[sublinesA[not(sublineA/prodid = preceding-sibling::sublinesA/sublineA/prodid)]]/sublinesA/sublineA[not(prodid = preceding-sibling::sublineA/prodid)]/weight)" nodeset"instance('Generated')/page1/table1/totalwgt"></xforms:bind> 

    <item> 
    <sublinesA> 
     <sublineA> 
      <prodid>AAA</prodid> 
      <weight>10</weight> 
     </sublineA> 
     <sublineA> 
      <prodid>AAA</prodid> 
      <weight>10</weight> 
     </sublineA> 
     <sublineA> 
      <prodid>BBB</prodid> 
      <weight>20</weight> 
     </sublineA> 
    </sublinesA> 
    </item> 

    <item> 
    <sublinesA> 
     <sublineA> 
      <prodid>BBB</prodid> 
      <weight>20</weight> 
     </sublineA> 
     <sublineA> 
      <prodid>BBB</prodid> 
      <weight>20</weight> 
     </sublineA> 
     <sublineA> 
      <prodid>CCC</prodid> 
      <weight>30</weight> 
     </sublineA> 
    </sublinesA> 
    </item> 

    <item> 
    <sublinesA> 
     <sublineA> 
      <prodid>CCC</prodid> 
      <weight>30</weight> 
     </sublineA> 
    </sublinesA> 
    </item> 

回答

0

calculate表達式選擇每sublinesA/sublineA/weight元件的父sublineA元件具有不同於其兄弟前述不同的產品ID。因此第二個item中的第一個BBB被計數,第三個項目中的CCC也被計數。

如果您打算按項目對重量進行求和,那麼您錯誤地期望總和60;你應該期待三個總和30,50,30。

如果另一方面,你打算在一個給定的表中所有項目的總和權重(並給出如何計算是綁定的,我想你是) ,那麼[not(prodid = preceding-sibling::sublineA/prodid)]不是正確的謂詞。

如果實例中只有一個table1實例,那麼您可以替換[not(prodid = preceding::sublineA/prodid)]。如果有多個,您將需要做一些非常聰明的XPath,或者可能重構文檔,以便更容易地執行您所需的操作。 (這與你的問題沒有關係,但我注意到你正在檢查謂詞兩次;除非我失去了一些東西,否則可以在不改變表達式意義的情況下刪除第一個雙重嵌套謂詞。 XForms引擎對優化非常積極,我期望第一個謂詞的唯一效果是減慢速度。)