2013-02-13 72 views
3

我知道我可以用数值求和多个节点。 我怎么能在一组节点上做一个“布尔和”?例如:XSLT中的布尔“求和”

<a> 
    <b>false</b> 
    <b>false</b> 
    <b>true</b> 
    <b>false</b> 
</a> 

我怎么能得到所有的<b>节点值的布尔OR? (这应该是'真实的')。

+0

今天,我还了解到,在假XML()的输出,那就是字符串'false',它本身具有布尔值true()。 – Justsalt 2013-02-15 14:28:27

回答

3

使用

boolean(/*/b[. = 'true']) 

这产生了表达的布尔值:

/*/b[. = 'true'] 

和准确当上述表达式选择为真至少一个节点 - 也就是说,当b是顶部元素的子元素,并且其字符串值是字符串'true


如果您还想计算 “布尔产品”(使用,做到:

not(/*/b[. = 'false']) 
+1

太棒了!我担心我会进入递归模板的丛林。非常感谢它可以放在一个单一的表达式中,也适用于“布尔产品”。 – Justsalt 2013-02-14 13:12:45

+0

@Justsalt,不客气。是的,XPath是一门伟大的语言。 – 2013-02-14 15:26:49

+0

@JLRishe,感谢编辑 - 赞赏。 – 2013-02-14 15:37:26

0

你可以算真值:

<xsl:if test="count(a/b[text()='true']) > 0"> 
     true 
</xsl:if> 

如果有任何真值或将是真实的。

+1

如果它是基于文本,你不需要计数:'/ a/b [。='true']' – 2013-02-13 22:01:52