0

こんにちは、皆さんの助けが必要です! 私は、第 2 レベルのループに属するすべての一意の製品 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>
4

1 に答える 1

0

この式は、親要素の製品 ID がその前の兄弟の製品 ID と異なるcalculateすべての要素を選択します。そのため、3 番目のアイテムと同様に、2 番目の最初のアイテムがカウントされます。sublinesA / sublineA / weightsublineABBBitemCCC

アイテムごとに重量を合計しようとしている場合、合計が 60 になると期待するのは誤りです。30、50、30 の 3 つの合計を期待する必要があります。

一方、特定のテーブル内のすべての項目の重みを合計しようとしている場合 (そして、計算がどのようにバインドされているかを考えると、そうであると思います)、[not(prodid = preceding-sibling::sublineA/prodid)]正しい述語ではありません。

table1インスタンスにインスタンスが1 つしかない場合は、 を置き換えるだけ[not(prodid = preceding::sublineA/prodid)]です。複数ある場合は、非常に巧妙な XPath を実行するか、ドキュメントを再構築して必要なことを実行しやすくする必要があります。

(あなたの質問とは関係ありませんが、述語を 2 回チェックしていることに注意してください。何かが欠けていない限り、式の意味を変更することなく、最初の二重にネストされた述語を削除できます。XForms エンジンが本当に最適化に積極的ですが、最初の述語の唯一の効果は物事を遅くすることだと思います.)

于 2012-08-20T02:02:13.240 に答える