在比较 XSLT <xsl:if> 中的字符串时,如何指定“不等于”?

Posted

技术标签:

【中文标题】在比较 XSLT <xsl:if> 中的字符串时,如何指定“不等于”?【英文标题】:How do I specify "not equals to" when comparing strings in an XSLT <xsl:if>? 【发布时间】:2012-05-19 01:51:46 【问题描述】:

目前我有一个带有以下代码的 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">

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

【问题讨论】:

【参考方案1】:

正如菲尔伯特所说;但也要注意,通常写得更好

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

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

6 年后

由于这个答案似乎很流行,但对某些读者来说可能有点神秘,让我扩展一下。

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

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

【讨论】:

【参考方案2】:

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

<xsl:if test="Count != 'N/A'">

【讨论】:

也许值得补充一点,引号是必需的,因为没有它们,测试完全有意义:然而,在这种情况下,它会询问 Count 子元素的值是否不等于N 子元素的一些 A 子元素的值。

以上是关于在比较 XSLT <xsl:if> 中的字符串时,如何指定“不等于”?的主要内容,如果未能解决你的问题,请参考以下文章

选择字段元素时不确定 XSLT 文档中的当前路径

XSL:IF 内 XSL:for-each-group

如何创建布尔值?

如何在 XSLT 表中显示正确的内容

如何在 <xsl:if test="contains(string, searchedforstring)"> 中使用变量而不是字符串

将 xml 中的节点与 xslt 进行比较