代码之家  ›  专栏  ›  技术社区  ›  Brian Johnson

布尔值上的test=“”始终返回true

  •  6
  • Brian Johnson  · 技术社区  · 15 年前

    为什么

    <xsl:if test="<XPATH to boolean value here>">
    ...
    </xsl:if>
    

    总是返回真?

    因为根据定义,布尔值可以是0,1、“假”和“真”,所以测试布尔值的唯一方法是对这些值进行字符串比较。这不可能是对的。

    3 回复  |  直到 10 年前
        1
  •  9
  •   Robert Rossney    15 年前

    这个 test 指定在 <xsl:if> 就像它叫 boolean 功能。这个函数不能像你想象的那样工作。如果其参数的计算结果为节点集(如果使用路径作为其参数,则为),则如果节点集不为空,则返回true,否则返回false。实际上,您是在测试元素的存在性,而不是它的值。如果 foo 包含 false ,

    <xsl:if test="/path/to/foo">
    

    将始终评估为“真”,因为您在测试中真正要求的是“这个元素存在吗?”而不是“元素的值是真的吗?”元素存在。

    布尔值必须是 true , , 1 0 是XML架构的一部分( which see )而不是xpath,它对这个规则一无所知。(即xpath 1.0。xpath 2.0/xquery 1.0具有 the fn:boolean function ,这是智能的,即XML模式感知,布尔值的计算。)要确定一个值在XSLT中是否为真,必须显式检查它:

    <xsl:if test="/path/to/foo = 'true' or /path/to/foo = '1'">
    
        2
  •  0
  •   DOK    15 年前

    你可以在这里找到很多想法:

    Empty Element

    how to test an empty element in XSL?

        3
  •  0
  •   tony wallace    10 年前

    xpath规范给出了一个布尔函数。因此,布尔值(value)将始终返回true或false。

    推荐文章