XSL if: ensaio com condições de ensaio múltiplas

[Resolvido]

graças ao @IanRoberts, tive de usar a função normalizar-espaço nos meus nós para verificar se estavam vazios.

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

[Problema]

estou a tentar criar uma condição xsl para verificar se as combinações de nó estão vazias ou não. Eu tentei abaixo das condições, mas eles não funcionam, alguém tem uma idéia de como fazê-lo funcionar

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

Eu também tentei

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

e também tentou

<xsl:if test="(node/ABC!='')>
<xsl:if test="(node/DEF='')>
<xsl:if test="(node/GHI='')">
Nope not working..
</xsl:if>
</xsl:if>
</xsl:if>
Então, eu ... experimentado com um único xsl: se condições, e Abaixo está a observação

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

No entanto, se eu tentar procurar por condição vazia, i. e.

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

também, se eu tentar com a = = (Duplo igual a), então ele dá XSLT erro. i. e

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

Eu gostaria de ajudar a descobrir como obter o meu xsl: se o teste funciona para verificar várias condições. Obrigado antecipadamente.

[editar ] : só para actualizar aqui que a condição em que todos os nós não estão vazios funciona, não trabalhe quando eu tentar verificar para qualquer outro nó fora dos três nós que estão vazios.

para eg:

<xsl:if test=" node/ABC!='' and node/DEF!='' and node/GHI!='' ">
This condition works perfectly fine.
</xsl:if>
 22
Author: noobcode, 2014-01-27

2 answers

Graças ao @IanRoberts, tive de usar a função normalizar-espaço nos meus nós para verificar se estavam vazios.

<xsl:if test="((node/ABC!='') and (normalize-space(node/DEF)='') and (normalize-space(node/GHI)=''))">
  This worked perfectly fine.
</xsl:if>
 17
Author: noobcode, 2014-02-22 17:20:33

Tente usar a função empty():

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

Isto identifica ABC e DEF como vazios no sentido de que eles não têm quaisquer nós-filhos (sem elementos, sem nós de texto, sem instruções de processamento, Sem comentários).

Mas, como indicado por @Ian, os seus elementos podem não estar realmente vazios ou isso pode não ser o seu problema real - você não mostrou como é o seu XML de entrada.

Outra causa de erro pode ser a sua posição relativa na árvore. Por aqui. as condições de ensaio só funcionam se o modelo envolvente corresponder ao elemento-mãe de node ou se iterar o elemento-mãe de node.

 1
Author: Mathias Müller, 2014-01-27 13:02:28