我想爲兩種類型的情況返回1個輸出。第一種情況必須通過節點循環來確定它是否被滿足。下面是XML:XSLT - 測試每個節點的條件,並在條件滿足時打破測試
<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>
這是我未完成的XSLT,它開始於第一USC_Purchase節點:
<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循環將返回多條消息,如果有任何產品傳遞正常,還會返回信用卡表單。 (grr!)
我的問題是 - 是否有可能循環多個購買節點,並停止一旦遇到一個案例?
以下是具體步驟(如果我的解釋是扔人關):
兩個輸出(錯誤信息和信用卡的形式)之間進行選擇。
對於每個USC_Purchase節點,如果在任何節點上滿足'X'條件,則顯示單個錯誤消息。
否則,顯示信用卡表格。
如果需要更多信息,請讓我知道。
編輯
肯定,purchase_total由所有paymentrequiredtotals的總和決定的,所以:
<xsl:variable
name="purchase_total"
select="sum(USC_Purchase/@PaymentRequiredTotal)" />
有沒有機會看到更多XSLT的biiiit?特別是,如何確定'$ purchase_total'? – JLRishe
感謝您爲'purchase_total'添加邏輯。所以我在理解何時應該顯示錯誤消息的邏輯方面遇到了一些麻煩。它看起來像'purchase_total'被確定爲跨所有行的總和。這應該與'@ RefundTotalAllowed'值的總和進行比較,還是與每個'@ RefundTotalAllowed'單獨比較?它也看起來像是在那裏進行絕對值計算,所以如果'@ PaymentRequiredTotal'的總和的絕對值是>'RefundTotalAllowed',顯示錯誤?我無法理解這裏的邏輯。 – JLRishe
這是正確的。如果PaymentRequiredTotal的絕對值爲> RefundTotalAllowed,則應顯示錯誤。基本上RefundTotalAllowed確定用戶是否通過信用卡爲該特定產品付款,如果他們確實將退還給我們的最大金額返還給該信用卡。如果他們通過支票支付,RefundTotalAllowed將爲0.我希望這有助於澄清事情。 @JLRishe – user673869