为什么我的XSLT测试使用逻辑OR失败?

时间:2016-10-01 01:26:11

标签: xml xslt

我需要检查3个条件,如果有任何条件是真的我需要执行一些东西,我试过下面:

Value='Java'; 

<xsl:if  test="Value!='Java'  or Value!='Python' or Value='James' ">
    Do some Stuff.... 
</xsl:if>

如果我将Java作为Value传递,那么它会进入内部,如果......有什么不正确吗?

1 个答案:

答案 0 :(得分:1)

您有一个逻辑错误,可能误解了变量在XSLT中的工作方式。

问题#1:逻辑错误

当然,当Value'Java'时,您的测试正在通过,因为它必然不等于'Python',因此第二个子句通过,然后逻辑OR表达式为真且测试通行证。

如果你想确保测试仅在Value是其他值时通过,那么使用连词而不是析取:

<xsl:if test="Value!='Java' and Value!='Python' and Value!='James' ">

   <!-- do something -->

</xsl>

如果Value不是'Java''Python''James',则条件会通过。

更新:根据OP评论:

  

使用并按照您的建议,但当我将SAP作为值传递时,它就会发生   如果条件在里面..根据我的逻辑,它应该只有   詹姆斯

ValueSAP时,它不属于JavaPythonJames,因此当然条件为真。如果您希望仅在James 的情况下继续 ,则将条件简化为

<xsl:if test="Value='James'">

   <!-- do something -->

</xsl>

问题#2:对XSLT中的变量的误解

<xsl:if test="Value!='Java' and Value!='Python' and Value!='James' ">

Value不是变量,它是针对当前上下文节点的子元素的测试。如果存在Value子元素,则在显示的测试中使用其字符串值。

你写过吗

<xsl:variable name="Value" select="'Java'"/>
<xsl:if test="$Value!='Java' and $Value!='Python' and $Value!='James' ">

然后Value将是一个变量。