xslt测试一组节点的值相等性
给定以下xml:xslt测试一组节点的值相等性,xslt,Xslt,给定以下xml: <parameterGroup> <parameter value="1" name="Level0_stratum"> </parameter> <parameter value="1" name="Level2_stratum"> </parameter> <parameter value="1" name="Level1_stratum"> </p
<parameterGroup>
<parameter value="1" name="Level0_stratum">
</parameter>
<parameter value="1" name="Level2_stratum">
</parameter>
<parameter value="1" name="Level1_stratum">
</parameter>
<parameter value="6" name="foo">
</parameter>
<parameter value="9" name="bar">
</parameter>
</parameterGroup>
但我不确定比较所有@value属性是否相等的最有效方法是什么?我相信这应该可以实现您想要做的事情(行的
值不是必需的,只是用来显示变量的值):
在将第三个值更改为8(或任何其他值)后,对示例输入运行此操作时,结果为:
3 strata. All equal: true
3 strata. All equal: false
我相信这应该是您想要做的(行的值不是必需的,只是用来显示变量的值):
在将第三个值更改为8(或任何其他值)后,对示例输入运行此操作时,结果为:
3 strata. All equal: true
3 strata. All equal: false
如果ends-with()可用,那么您使用的是XSLT 2.0,因此distinct-values()可用,因此您只需执行以下操作即可
count(distinct-values(
//parameter[starts-with(@name,'Level') and ends-with(@name,'_stratum') ])/@value))
= 1
如果ends-with()可用,那么您使用的是XSLT 2.0,因此distinct-values()可用,因此您只需执行以下操作即可
count(distinct-values(
//parameter[starts-with(@name,'Level') and ends-with(@name,'_stratum') ])/@value))
= 1
解决这个问题的一种方法是编写一个自定义java函数;但如果不需要的话,我宁愿不这样做;但是如果不需要的话,我宁愿不这样做。您之所以将ends with更改为substring函数,是因为XSLT 1.0中不存在ends-with()
,我想这可能就是您正在使用的(我忘了您说过您已经得到了ends with
的公式)。如果以
功能结束,那么无论如何,这是更好的选择。我将更新我的答案。您之所以将ends with更改为substring函数?原因很简单,因为XSLT 1.0中不存在ends-with()
,我想这可能就是您正在使用的(我忘了您说过您已经得到了ends with
working的公式)。如果以
功能结束,那么无论如何,这是更好的选择。我会更新我的答案。答案后面有一个错误的括号。除此之外,此解决方案的优点是在没有值时返回false。在[1]之后有一个错误的大括号。除此之外,此解决方案的优点是在没有值时返回false