xsl:当测试多个条件被视为'或'而不是'和'

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (350)

我正在尝试创建一个xsl:choose语句来测试多个条件。到目前为止,我有这样的:

<xsl:choose>
    <xsl:when test="$AccountNumber != '12345' and $Balance != '0'">
       <do stuff here>
       ...

问题在于'和'被视为'或'。如果账户号码是12345或账户的余额是0,则该条件被视为true并且代码被执行。我需要测试是两个条件必须是真实的...我有这里的语法错误吗?

提问于
用户回答回答于

如果$ AccountNumber或$ Balance是一个节点集,那么这种行为很容易发生。我会建议尝试这个:

<xsl:when test="not($AccountNumber = '12345' or $Balance = '0')">
用户回答回答于

问题在于'和'被视为'或'。

,问题在于您正在使用XPath !=运算符,并且您不知道其“怪异”语义。

解答

只需用x != y表达式替换任何not(x = y)表达式即可。

在你的具体情况下

替换

<xsl:when test="$AccountNumber != '12345' and $Balance != '0'">

<xsl:when test="not($AccountNumber = '12345') and not($Balance = '0')">

说明

根据定义,只要运算!=符的一个操作数是一个节点集,则如果节点集中存在节点,其值不等于另一个操作数,则评估此运算符的结果为真。

所以

 $someNodeSet != $someValue

通常不会产生如下结果:

 not($someNodeSet = $someValue)

后者(根据定义)恰好在没有$someNodeSet其字符串值等于的节点时为真$someValue

学习课程

!=除非你确定你知道你在做什么,否则不要使用操作员。

所属标签

可能回答问题的人

  • 华讯云

    0 粉丝0 提问11 回答
  • EatRice

    16 粉丝0 提问6 回答
  • 卓脑域名

    0 粉丝0 提问6 回答
  • gulu丶咕噜

    0 粉丝1 提问6 回答

扫码关注云+社区

领取腾讯云代金券