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

8
我将定义以下变量:

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

现在我需要做一个条件语句:如果变量pica036E不为空,且pica036F为空,则显示以下信息;否则,显示另一条信息。以下是我的代码,但我没有得到任何输出。 "null or empty" 是否正确定义?
<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个回答

9
在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中使用!=总是一种代码异味。通常,你应该写成not(X = Y)而不是X != Y。

如果一个变量 x 没有值,那么是否可以为其赋值? - vishnu
@vishnu,请不要通过在回答另一个问题的评论中提问来寻求解答。请开启一个新线程,并提供所有回答问题所需的信息。着重描述您想要实现什么,您已经做了什么,以及它失败的原因是什么。 - Michael Kay

4
请检查以下代码。我认为你的输出会
<xsl:when test="not($pica036E = '') and $pica036F = ''">

4
在XSLT中,一个包含文本内容的变量也可以用作布尔变量。非空内容表示为true,空内容表示为false
因此,条件也可以写成:
<xsl:when test="$pica036E and not($pica036F)">

请记住,not是一个函数(不是一个操作符)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接