在 XSLT 中比较字符串时,如何指定 "不等于"?

目前,我有一个 xsl,其中包含以下代码,我试图仅在不等于 N/A时打印出 "count",但"!="似乎不起作用。

<xsl:for-each select="Directory/Match">
    <xsl:if test = "Count != N/A">
        <tr>
            <td><xsl:value-of select="@bookName" /></td>
            <td><xsl:value-of select="@AuthorName" /></td>
            <td><xsl:value-of select="Count" /></td>
        </tr>
    </xsl:if>
</xsl:for-each>

不过,如果我尝试将其与数值进行比较,它就会起作用。

例如

<xsl:if test = "Occurrances != 0">

谁能告诉我:如果我想比较字符串,可以用什么方法?

解决办法

正如 Filburt 所说,但也要注意,通常最好写成

test="not(Count = 'N/A')"

如果只有一个 Count 元素,它们的意思是一样的,但如果没有 Count 元素或有多个 Count 元素,它们的意思就不同了。

六年后

由于这个答案似乎很受欢迎,但对一些读者来说可能有点含糊不清,让我来扩展一下。

XPath 中的"="和"!="运算符可以比较两个值集。一般来说,如果 A 和 B 是值集,那么如果 A 和 B 中有任何一对值相等,"=" 返回 true,而如果有任何一对值不相等,"!=" 返回 true。

在常见的情况下,A 选择零或一节点,而 B 是一个常数(例如 "NA"),这意味着如果 A 不存在或其值不等于 "NA",not(A = "NA")返回 true。相反,如果 A 存在且不等于 "NA",A != "NA" 返回 true。通常,您希望将 "absent" 情况视为 "不等于",这意味着 not(A = "NA") 是合适的表述。

评论(0)

如果要与一个字符串字面进行比较,则需要将其放在(单)引号中:

评论(2)