我定义了以下变量:
<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>
答案 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 = ''">