在比较XSLT <xsl:if>中的字符串时,如何指定"not equals to"?

Max*_*yie 60 xslt

目前我有一个xsl与以下代码,我正在尝试打印出"计数"只有它不等于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>
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将其与数值进行比较,它会起作用.

例:

<xsl:if test = "Occurrances != 0">
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*Kay 85

正如Filburt所说; 但也请注意,写作通常更好

test="not(Count = 'N/A')"
Run Code Online (Sandbox Code Playgroud)

如果只有一个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")是适当的表述.


Fil*_*urt 32

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

<xsl:if test="Count != 'N/A'">
Run Code Online (Sandbox Code Playgroud)

  • 也许值得补充的是引号是必需的,因为测试在没有它们的情况下非常有意义:但是,在这种情况下,它会询问`Count`子元素的值是否不等于某些`A`子元素的值一个`N`子元素. (4认同)