这究竟是做什么的?
<xsl:if test="./employee/first-name[@id='14']" >
我的意思是,这种情况何时成真,如果./employee/first-name[@id]
!= null
或""
,还是什么?
我已经编辑了上面的语句,所以它测试id = 14的元素名字是否有一个正文或者它的正文是否包含数据,或者如果名字参数没有正文则返回true?
答案 0 :(得分:11)
如果<xsl:if test=...>
中的查询返回至少一个节点,则条件值将变为true。
您提供的新XSLT表达式:
<xsl:if test="./employee/first-name[@id='14']" >
将评估为 true 当且仅当first-name
下employee
属性等于字符串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
,或者在所有其他情况下评估为NaN
,true
。
false
的其他值是空字符串''
(在所有其他情况下为true
)和false()
本身的结果。请注意,还有true()
函数可返回布尔值true
。
另请注意,根据描述的字符串规则,字符串'false'
的计算结果为true
。