我知道我可以用数值求和多个节点。 我怎么能在一组节点上做一个“布尔和”?例如:XSLT中的布尔“求和”
<a>
<b>false</b>
<b>false</b>
<b>true</b>
<b>false</b>
</a>
我怎么能得到所有的<b>
节点值的布尔OR? (这应该是'真实的')。
我知道我可以用数值求和多个节点。 我怎么能在一组节点上做一个“布尔和”?例如:XSLT中的布尔“求和”
<a>
<b>false</b>
<b>false</b>
<b>true</b>
<b>false</b>
</a>
我怎么能得到所有的<b>
节点值的布尔OR? (这应该是'真实的')。
使用:
boolean(/*/b[. = 'true'])
这产生了表达的布尔值:
/*/b[. = 'true']
和准确当上述表达式选择为真至少一个节点 - 也就是说,当b
是顶部元素的子元素,并且其字符串值是字符串'true
。
如果您还想计算 “布尔产品”(使用和),做到:
not(/*/b[. = 'false'])
太棒了!我担心我会进入递归模板的丛林。非常感谢它可以放在一个单一的表达式中,也适用于“布尔产品”。 – Justsalt 2013-02-14 13:12:45
@Justsalt,不客气。是的,XPath是一门伟大的语言。 – 2013-02-14 15:26:49
@JLRishe,感谢编辑 - 赞赏。 – 2013-02-14 15:37:26
你可以算真值:
<xsl:if test="count(a/b[text()='true']) > 0">
true
</xsl:if>
如果有任何真值或将是真实的。
如果它是基于文本,你不需要计数:'/ a/b [。='true']' – 2013-02-13 22:01:52
今天,我还了解到,在假XML()的输出,那就是字符串'false',它本身具有布尔值true()。 – Justsalt 2013-02-15 14:28:27