大家好,我需要你的帮助!我一直在研究一个代码,它将获得属于二级循环的每个唯一产品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>
答案 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引擎在优化方面非常积极,我预计第一个谓词的唯一影响就是减慢速度。)