Получить общий вес уникального продукта
Привет всем, мне нужна ваша помощь! Я работал над кодом, который будет получать общий вес каждого уникального идентификатора продукта, который принадлежит циклу второго уровня. Вот код, который я использую. Но результат, который я получаю, равен 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 ответ
Ваш calculate
выражение выбирает каждый sublinesA / sublineA / weight
элемент, чей родитель sublineA
Элемент имеет идентификатор продукта, отличный от идентификатора предыдущего брата. Итак, первый BBB
во-вторых item
считается, как и CCC
в третьем пункте.
Если вы намереваетесь суммировать вес по элементам, то вы ошибаетесь, ожидая сумму 60; Вы должны ожидать три суммы 30, 50, 30.
Если, с другой стороны, вы намереваетесь суммировать вес для всех элементов в данной таблице (и, учитывая, как расчеты связаны, я полагаю, вы), то [not(prodid = preceding-sibling::sublineA/prodid)]
не правильный предикат.
Если есть только один table1
экземпляр в экземпляре, то вы можете просто заменить [not(prodid = preceding::sublineA/prodid)]
, Если их несколько, вам понадобится либо сделать очень умный XPath, либо, возможно, реструктурировать документ, чтобы было проще делать то, что вам нужно.
(Это не относится к вашему вопросу, но я попутно отмечаю, что вы проверяете предикат дважды; если я что-то не упустил, первый дважды вложенный предикат можно отбросить, не меняя смысла выражения. Если ваш движок XForms действительно не Я настаиваю на оптимизации, я ожидаю, что единственный эффект первого предиката - замедление.)