首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以下条件在xsl中不起作用

以下条件在xsl中不起作用
EN

Stack Overflow用户
提问于 2015-03-06 00:14:06
回答 1查看 196关注 0票数 0

我有下面的条件,我已经用下面的xsl写过了..

因为我在xml中得到了一个值fpml:tradeId,现在它可以存在于xml中,也可以不存在,例如,如下所示。

代码语言:javascript
复制
<fpml:tradeId tradeIdScheme=""></fpml:tradeId>
or it can contain value also
<fpml:tradeId tradeIdScheme="">10381159400</fpml:tradeId>

作为建议,我已将实现更改为,但仍不起作用..

代码语言:javascript
复制
                <xsl:if test = "fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId = ' '">
                 <xsl:value-of select="'null'" />
                </xsl:if>                   
            </ContractID>

代码语言:javascript
复制
                <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>

建议新的实现已完成,但仍不起作用..

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2015-03-06 00:24:09

你要测试的是

代码语言:javascript
复制
fpml:tradeId = ' '

但在您的示例中并非如此- fpml:tradeId的值是空字符串,而不是包含空格的字符串。而不是将第一种情况的值与' '进行比较,您可以使用

代码语言:javascript
复制
<xsl:if test="normalize-space(
    fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId)">

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

对于第二种情况

代码语言:javascript
复制
<xsl:if test="not(normalize-space(
    fpml:dataDocument/*/*/fpml:partyTradeIdentifier[2]/fpml:tradeId))">

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28882502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档