71

目前我有一个带有以下代码的 xsl,我正在尝试打印出“count”,只有当它不等于N/A. 但似乎"!="不起作用。

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

有人可以告诉我:如果我想比较字符串,我可以使用什么?

4

2 回答 2

116

正如菲尔伯特所说;但还要注意,通常最好写

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

如果只有一个 Count 元素,它们的含义相同,但如果没有 Count,或者有多个,则含义不同。

6年后

由于这个答案似乎已经变得流行,但对某些读者来说可能有点神秘,让我扩展它。

XPath 中的“=”和“!=”运算符可以比较两组值。一般来说,如果 A 和 B 是一组值,那么如果 A 和 B 中存在任何相等的值对,则“=”返回 true,而如果存在任何不相等的对,则“!=”返回 true。

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

于 2012-05-10T15:02:55.117 回答
39

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

<xsl:if test="Count != 'N/A'">
于 2012-05-10T13:35:01.163 回答