在XSLT中test =“element [@attribute]”做了什么?

时间:2009-11-16 14:02:59

标签: xslt xpath

这究竟是做什么的?

<xsl:if test="./employee/first-name[@id='14']" >

我的意思是,这种情况何时成真,如果./employee/first-name[@id]!= null"",还是什么?

修改

我已经编辑了上面的语句,所以它测试id = 14的元素名字是否有一个正文或者它的正文是否包含数据,或者如果名字参数没有正文则返回true?

3 个答案:

答案 0 :(得分:11)

如果<xsl:if test=...>中的查询返回至少一个节点,则条件值将变为true。

您提供的新XSLT表达式:

<xsl:if test="./employee/first-name[@id='14']" >

将评估为 true 当且仅当first-nameemployee属性等于字符串id '14'

<employee><first-name id="" /></employee>     <!-- does NOT match -->
<employee><first-name id="014" /></employee>  <!-- does NOT match -->
<employee>
  <first-name id="foobar" />
  <first-name id="14" />                      <!-- DOES match -->
</employee>

答案 1 :(得分:3)

似乎有一些缺失的部分,因为最后or ""会抛出错误。但是,让我们看看:

    ./                    search within current node
    employee/first-name   for an employee tag with an first-name child tag
    [@id]                 where first-name tag have an id attribute
    !=null                and that first-name tag have some value

答案 2 :(得分:2)

<xsl:if>测试表达式(如传统语言中的if)。表达式的结果被评估为布尔值。

在您的情况下,表达式是一个XPath选择器(/employee/first-name[@id]) - 它将始终返回一个节点集。仅当节点集为空时(例如,找不到匹配的节点),节点集才会被评估为false

表达式也可能类似于number(/employee/id)。现在表达式结果是一个数字,如果它是零,则评估为false,或者在所有其他情况下评估为NaNtrue

false的其他值是空字符串''(在所有其他情况下为true)和false()本身的结果。请注意,还有true()函数可返回布尔值true

另请注意,根据描述的字符串规则,字符串'false'的计算结果为true