2014-01-27 49 views
19

[解决]XSL如果:测试与多个测试条件

感谢@IanRoberts,我不得不用我的节点正规化空间功能检查,如果他们是空的。

<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))"> 
    This worked perfectly fine. 
</xsl:if> 

[问题]

我试图创建一个XSL条件,以检查是否节点的组合是空的或不是。我曾尝试下面的条件,但他们没有工作,没有任何人有一个想法,如何得到它的工作

<xsl:if test=" node/ABC!='' and node/DEF='' and node/GHI='' "> 
This does not work 
</xsl:if> 

我也曾尝试

<xsl:when test="((node/ABC!='') and (node/DEF='') and (node/GHI=''))"> 
This does not work either.. 
</xsl:when> 

而且还试图

<xsl:if test="(node/ABC!='')> 
<xsl:if test="(node/DEF='')> 
<xsl:if test="(node/GHI='')"> 
Nope not working.. 
</xsl:if> 
</xsl:if> 
</xsl:if> 

I,然后试用单个xsl:if条件,以下是观察

<xsl:if test="node/ABC!=''> 
**This is working fine** 
</xsl:if> 

但是如果我尝试寻找空状态,即

<xsl:if test="node/ABC=''> 
**This does not work** 
</xsl:if> 

另外,如果我用==尝试(双等于),那么它给XSLT错误。即

<xsl:if test="node/ABC==''> 
***This gives a compilation error*** 
</xsl:if> 

我想搞清楚如何得到我的帮助的xsl:if测试工作,检查多个条件。提前致谢。

[编辑]:只是在这里更新,如果所有节点都不是空的if条件工作,当我尝试检查三个空节点中的任何其他节点时,它不起作用。

对于如:

<xsl:if test=" node/ABC!='' and node/DEF!='' and node/GHI!='' "> 
This condition works perfectly fine. 
</xsl:if> 
+2

显示您的XML示例。另外请注意,就xpath而言,包含空格的元素是_not_空。你可能希望查看'normalize-space'函数。 –

+0

嗨@IanRoberts,我在一个需要xslt查看数据的web应用程序中工作。不知道如何获得XML。但是,我也尝试了normalize-space函数(normalize-space说节点可能有空格(?))。我正在测试的列没有任何价值。 – noobcode

+1

您可以放入一个[身份转换](http://en.wikipedia.org/wiki/Identity_transform#Using_XSLT),该简单地返回与之前相同的XML。有很多原因可能导致它无法正常工作,例如无关的空白,名称空间不匹配,区分大小写,上下文不是您认为的那样等等 - - 无法在没有看到输入的情况下进行诊断。 –

回答

14

感谢@IanRoberts,我不得不用我的节点正规化空间功能检查,如果他们是空的。

<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))"> 
    This worked perfectly fine. 
</xsl:if> 
1

尝试使用empty()功能:

<xsl:if test="empty(node/ABC/node()) and empty(node/DEF/node())"> 
    <xsl:text>This should work</xsl:text> 
</xsl:if> 

这标识ABCDEF在这个意义上是空的,他们没有任何的子节点(没有元素,无文本节点,没有处理指令,没有评论)。

但是,正如@Ian指出,您的元素可能不是真的空或可能不是你实际的问题 - 你没有表现出你输入的XML是什么样子。

错误的另一个原因可能是树中的相对位置。测试条件下,这种方式只有在周围模板node父元素相匹配,或者如果您遍历的node父元素的作品。

+0

嗨@Mathias,我没有尝试上面的条件,但它给我一个XSLT无效的错误,在我正在使用的Web应用程序。 – noobcode