【问题标题】:Below condition is not working in xsl以下条件在 xsl 中不起作用
【发布时间】:2015-03-05 16:14:05
【问题描述】:

我有以下条件,我在下面的 xsl 中写了..

因为我在 fpml:tradeId 的 xml 中获得了一个值,所以它现在可以在 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>

【问题讨论】:

    标签: xslt xslt-1.0


    【解决方案1】:

    你正在测试

    fpml:tradeId = ' '
    

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

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

    在 XPath 中,字符串强制转换为布尔值,如果字符串为空则将其视为 false,否则将其视为 true,因此如果 tradeId 值包含至少一个非空白字符,则测试将通过,并且如果它完全为空或仅包含空格,则失败。

    对于第二种情况

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

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

    【讨论】:

    • 我已经编辑了这个问题,请您提供建议
    • 而且xml标签就像
    • 正如我所见,tradeid 标签根本不包含值
    • @user1620642 您的编辑替换了第一个测试(test="... != ' '"),但没有替换第二个测试,它仍在与' '(一个空格)进行完全匹配。
    猜你喜欢
    • 2013-01-22
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多