将某些条件与xsl中的现有条件相结合

时间:2013-06-12 14:45:36

标签: xml xslt xslt-1.0

让我先从下面的问题开始,我要求的可能是一个问题,但我只是坚持一件事。我已尽力而为,需要你们的建议,请指教。

如下所示,您可以看到我在 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'" />  

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

2 个答案:

答案 0 :(得分:1)

只需添加一个<xsl:when>条款与您的新条件,作为<xsl:choose>的新子项:

<xsl:choose>
   <xsl:when test="$legReferenceVar != $ReturnLegVar/@legIdentifier">
      <xsl:text>ERROR</xsl:text>
   </xsl:when>
   ...etc.

答案 1 :(得分:1)

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

  

它由一系列xsl:when元素组成,后跟可选项   xsl:otherwise元素。每个xsl:when元素都有一个属性,   test,指定表达式。 xsl的内容:when和   xsl:otherwise元素是一个模板。当xsl:choose元素是   处理后,每个xsl:when元素依次进行测试   计算表达式并将结果对象转换为   boolean就像通过调用boolean函数一样。的内容   首先,只有第一个,xsl:when元素,其测试为真   实例化。如果没有xsl:when为true,则为xsl的内容:否则为   元素被实例化。如果没有xsl:when元素为真,则为否   xsl:otherwise元素存在,没有创建任何内容。

只需将新的错误条件添加为另一个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>