获得独特的prodid总重量

时间:2012-07-30 17:53:54

标签: xforms xfdl

大家好,我需要你的帮助!我一直在研究一个代码,它将获得属于二级循环的每个唯一产品ID的总权重。这是我正在使用的代码。但我得到的输出是110,应该只有60。提前谢谢!

<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>

1 个答案:

答案 0 :(得分:0)

您的calculate表达式会选择其父sublinesA / sublineA / weight元素的产品ID与其前面的兄弟不同的sublineA元素。因此,计算第二个BBB中的第一个item,以及第三个项目中的CCC

如果你打算按项目加权,那你就错了预期总和60;你应该期待三个金额30,50,30。

另一方面,如果你打算对给定表中所有项目的权重求和(并给出计算的约束方式,我猜你是),那么[not(prodid = preceding-sibling::sublineA/prodid)]就不是正确的谓词。< / p>

如果实例中只有一个table1实例,那么您可以替换[not(prodid = preceding::sublineA/prodid)]。如果有多个,您将需要做一些非常聪明的XPath,或者可能需要重新构建文档,以便更容易地完成您所需的操作。

(这与你的问题无关,但我顺便提一下你正在检查谓词两次;除非我遗漏了某些东西,否则可以删除第一个双嵌套谓词而不改变表达式的含义。除非你的XForms引擎在优化方面非常积极,我预计第一个谓词的唯一影响就是减慢速度。)