以下条件在xsl中不起作用

时间:2015-03-05 16:14:06

标签: xslt xslt-1.0

我有以下条件,我已经在下面的xsl中使用了..

因为我在xml的fpml中得到了一个值:tradeId现在它可以在xml中存在,或者它不能存在,例如如下所示..

<fpml:tradeId tradeIdScheme=""></fpml:tradeId>
or it can contain value also
<fpml:tradeId tradeIdScheme="">10381159400</fpml:tradeId>

建议我已将实施更改为但仍无法正常工作..

                                                                                                                                                                                                                             

                <xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
                 <xsl:value-of select="'null'" />
                </xsl:if>                   
            </ContractID>

所以为了解决这个问题,我已经在xsl下面提出了这个问题,现在的问题是,对于在xml中不存在tradeId的情况,它不会放入空字符串请指教我的下面是执行 xsl是正确的

                <xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId != ' '">
                <xsl:choose>
                    <xsl:when test="contains(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')">
                        <xsl:value-of select="substring-before(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')" />
                </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId" />
                    </xsl:otherwise>
                </xsl:choose>
                </xsl:if>

                <xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
                 <xsl:value-of select="'null'" />
                </xsl:if>                   
            </ContractID>

建议新的实施完成,但它仍然无法正常工作..

<xsl:if test="normalize-space(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">
                <xsl:choose>
                    <xsl:when test="contains(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')">
                        <xsl:value-of select="substring-before(fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId,'-')" />
                </xsl:when>
                    <xsl:otherwise>
                        <xsl:value-of select="fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId" />
                    </xsl:otherwise>
                </xsl:choose>
                </xsl:if>

                <xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
                 <xsl:value-of select="'null'" />
                </xsl:if>                   
            </ContractID>

1 个答案:

答案 0 :(得分:1)

您正在测试

fpml:tradeId = ' '

它在你的例子中没有 - 你的fpml:tradeId的值是空字符串,而不是包含空格的字符串。对于第一种情况,您可以使用

的测试,而不是将值与' '进行比较
<xsl:if test="normalize-space(
    fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">

在XPath中,字符串强制转换为布尔值,如果字符串为空则将其视为false;如果不是,则将其视为true,因此如果tradeId值包含至少一个非{0},则测试将通过空格字符,如果它是完全空的或只包含空格则会失败。

对于第二种情况

<xsl:if test="not(normalize-space(
    fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId))">

会给你反向测试 - 如果字符串全是空白或空,则为true;如果不是,则为false(或者仅使用带有choose子句的otherwise而不是两个if测试)。