8

我定义了以下变量:

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

3 回答 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 中使用 != 始终是一种代码异味。通常,而不是X != Y,你应该写not(X = Y)

于 2017-03-16T11:58:38.963 回答
4

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

所以条件也可以写成:

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

请记住,这not是一个函数(不是运算符)。

于 2017-03-16T12:06:05.587 回答
4

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

<xsl:when test="not($pica036E = '') and $pica036F = ''">
于 2017-03-16T11:52:16.527 回答