如何在XSLT中检查变量是否为空或空?

时间:2017-03-16 10:15:54

标签: xslt xsl-choose

我定义了以下变量:

<xsl:variable name="pica036E"
                        select="recordData/record/datafield[@tag='036E']" />
<xsl:variable name="pica036F"
                        select="recordData/record/datafield[@tag='036F']" />

现在我需要做一个条件,如果变量pica036E不为空并且pica036F为空,则显示以下消息,否则显示另一条消息。 这是我的代码,但我不知道任何输出。是&#34; null或为空&#34;正确定义了吗?

<xsl:choose>
                        <xsl:when test="$pica036E != '' and $pica036F = ''">
                        <xsl:message>
                         036F no 036E yes      
                            </xsl:message>
                        </xsl:when>

                         <xsl:otherwise>
                        <xsl:message>
                                036E no 036F yes
                            </xsl:message>  
                        </xsl:otherwise> 
                    </xsl:choose>  

3 个答案:

答案 0 :(得分:3)

在XPath中,X = Y表示(如果X中有一对x,Y中的y满足x = y),而X!= Y表示(如果X中有一对x,Y中的y满足x!= y)

这意味着如果X或Y是空序列,那么X = Y和X!= Y都是假的。

例如,$pica036E != ''测试$pica036E中的值是否为零长度字符串。如果$pica036E中没有值,则没有值满足此条件。

因此,在XPath中使用!=总是代码味道。通常,您应该写X != Y而不是not(X = Y)

答案 1 :(得分:3)

在XSLT中,带有文本内容的变量也可以作为布尔变量。 非空内容表示 true ,空内容表示 false

因此条件也可以写成:

<xsl:when test="$pica036E and not($pica036F)">

请记住,not功能(不是运营商)。

答案 2 :(得分:2)

检查以下代码。我认为你的输出得到了

<xsl:when test="not($pica036E = '') and $pica036F = ''">