2 つのタイプのケースに対して 1 つの出力が返されるようにします。最初のケースは、ノードをループして、それが満たされているかどうかを判断する必要があります。XML は次のとおりです。
<in:inputs
xmlns:in="http://www.composite.net/ns/transformation/input/1.0">
<in:result name="GetCart">
<root xmlns="">
<USC_Purchase ProductPrice="95.0000"
PriceRuleID="1810"
PurchaseQuantity="-1.00"
PaymentNotRequiredQuantity="0.00"
PaymentRequiredQuantity="-1.00"
PaymentRequiredTotal="-95.000000"
PurchaseStatus="R"
RefundTotalAllowed="0.00">
<USC_Product_PriceRule
PriceRuleID="1810"
PriceRuleName="Full Attendee"
PriceRulePriority="1"
PriceRuleStatus="A"
WebUserGroups="13CONF-M001"
ExcludeWebUserGroups=""
ProductPrice="95.0000"
ExternalCode=""
PercentOfProductCode=""
OptionID="0"
FriendlyName="Discounted Rate"
StartEndRestrictionID="0"
ClassID="0"
IsHidden="0"/>
</USC_Purchase>
<USC_Purchase ProductPrice="55.0000"
PurchaseQuantity="-4.00"
PaymentNotRequiredQuantity="0.00"
PaymentRequiredQuantity="-4.00"
PaymentRequiredTotal="-220.000000"
PurchaseStatus="R"
RefundTotalAllowed="568.00">
<USC_Product_PriceRule/>
</USC_Purchase>
最初の USC_Purchase ノードから始まる未完成の XSLT を次に示します。
<xsl:choose>
<xsl:when test="@PurchaseStatus='R'
and ($purchase_total*($purchase_total >=0)
- $purchase_total*($purchase_total < 0))
> @RefundTotalAllowed">
We are having issues processing your refund online.
Please contact us for assistance.
</xsl:when>
<xsl:otherwise>
<!-- insert credit card form here -->
</xsl:otherwise>
これはうまく機能します...最初の製品がこれらの条件を満たした場合にのみ. その他の商品はチェックを外します。xsl:choose ステートメントの先頭にある for-each ループは、複数のメッセージを返し、いずれかの製品が正常に渡された場合はクレジット カード フォームも返します。(ぐう!)
私の質問は、複数の購入ノードをループして、1 つのケースが満たされると停止することは可能ですか?
手順は次のとおりです(私の説明が誰かを失望させる場合に備えて):
2 つの出力 (エラー メッセージとクレジット カード フォーム) から選択します。
各 USC_Purchase ノードについて、いずれかのノードで「X」条件が満たされた場合、単一のエラー メッセージを表示します。
それ以外の場合は、クレジット カード フォームを表示します。
さらに情報が必要な場合は、お知らせください。
編集
確かに、 purchase_total はすべての paymentrequiredtotals の合計によって決定されるため、次のようになります。
<xsl:variable
name="purchase_total"
select="sum(USC_Purchase/@PaymentRequiredTotal)" />