2017-03-16 134 views
1

我definded以下变量:如何在XSLT中检查变量是否为空或空?

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

现在我需要做的一个条件,如果变量pica036E是不是空的,pica036F是空的显示以下信息,否则显示另一条消息。 这是我的代码,但我没有任何输出。 “空或空”正确定义?

<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> 

回答

2

在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)

2

检查以下代码。我觉得你的输出得到

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

在XSLT中,带文本内容的变量也可以用作布尔变量。 非空内容表示为真,空内容表示虚假

这样的条件,也可以写为:

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

记住not功能(未操作)。

相关问题