1

让我首先开始下面这个我问的问题可能是重复的,但我坚持一件事。我已经尽力了,需要你们的建议,请指教。

如下所示,您可以看到我在XSLT 1.0中定义的模板,并且还存在某些条件,如下所示:

<xsl:template name="direction_emm_cashflowGDS">
    <xsl:param name="TradeHeaderVar" />
    <xsl:param name="ReturnSwapTradeVar" />
    <xsl:param name="ReturnLegVar" />
    <xsl:param name="InterestLegVar" />
    <xsl:param name="legReferenceVar" />
    <xsl:variable name="cdfPartyRef">
        <xsl:value-of select="$TradeHeaderVar/bookingEntityPerspective" />
    </xsl:variable>

<xsl:choose>
        <xsl:when
            test="($legReferenceVar=$ReturnLegVar/@legIdentifier and 
                   $cdfPartyRef=$ReturnLegVar/payerPartyReference) 
                  or 
                  ($legReferenceVar=$InterestLegVar/@legIdentifier and 
                   $cdfPartyRef=$InterestLegVar/payerPartyReference)">
            <xsl:value-of select="'Pay'" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="'Receive'" />
        </xsl:otherwise>
    </xsl:choose> 
</xsl:template>     

现在,由于我xsl:when根据指定的要求组织了某些条件,现在要求略有变化。

也就是说:

如果$legReferenceVar=$ReturnLegVar/@legIdentifier不等于,那么在这种情况下,需要显示选择的错误。

换句话说,如果$legReferenceVar != $ReturnLegVar/@legIdentifier然后错误消息显示为

<xsl:value-of select="'EEROR'" />

类似的情况是,要求的另一个变化是如果$legReferenceVar=$InterestLegVar/@legIdentifier不相等,则需要显示选择的错误。$legReferenceVar != $InterestLegVar/@legIdentifier然后错误消息显示为

 <xsl:value-of select="'EEROR'" />  

请告知如何将这些变化纳入现有条件。

4

2 回答 2

1

只需添加一个<xsl:when>带有新条件的子句,作为 的新子项<xsl:choose>

<xsl:choose>
   <xsl:when test="$legReferenceVar != $ReturnLegVar/@legIdentifier">
      <xsl:text>ERROR</xsl:text>
   </xsl:when>
   ...etc.
于 2013-06-12T17:29:47.230 回答
1

xsl:choose可以有多个xsl:when元素:

它由一系列xsl:when元素和一个可选的 xsl:otherwise元素组成。每个xsl:when元素都有一个属性 test,它指定一个表达式。xsl:when 和 xsl:otherwise元素的内容是一个模板。当处理xsl:choose元素时,将依次测试每个xsl:when元素,方法是评估表达式并将结果对象转换为布尔值,就像调用布尔函数一样。第一个且只有第一个 xsl:when 元素的内容被实例化,其测试为真。如果没有 xsl:when 为真,则实例化 xsl:otherwise 元素的内容。如果没有xsl:whenelement 为真,并且不存在 xsl:otherwise元素,则不创建任何内容。

只需将新的ERROR条件添加为另一个xsl:when条件:

<xsl:template name="direction_emm_cashflowGDS">
    <xsl:param name="TradeHeaderVar" />
    <xsl:param name="ReturnSwapTradeVar" />
    <xsl:param name="ReturnLegVar" />
    <xsl:param name="InterestLegVar" />
    <xsl:param name="legReferenceVar" />
    <xsl:variable name="cdfPartyRef">
        <xsl:value-of select="$TradeHeaderVar/bookingEntityPerspective" />
    </xsl:variable>

    <xsl:choose>
        <xsl:when test="$legReferenceVar != $ReturnLegVar/@legIdentifier
                        or $legReferenceVar != $InterestLegVar/@legIdentifier">
            <xsl:value-of select="'ERROR'"/>
        </xsl:when>
        <xsl:when
            test="($legReferenceVar=$ReturnLegVar/@legIdentifier 
                   and $cdfPartyRef=$ReturnLegVar/payerPartyReference) 
                 or 
                  ($legReferenceVar=$InterestLegVar/@legIdentifier 
                   and $cdfPartyRef=$InterestLegVar/payerPartyReference)">
            <xsl:value-of select="'Pay'" />
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="'Receive'" />
        </xsl:otherwise>
    </xsl:choose> 
</xsl:template>  
于 2013-06-12T17:31:39.653 回答