web-dev-qa-db-fra.com

XSL si: test avec plusieurs conditions de test

[Résolu]

Grâce à @IanRoberts, j'ai dû utiliser la fonction normaliser-espace sur mes nœuds pour vérifier s'ils étaient vides.

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

[Problème]

J'essaie de créer une condition xsl pour vérifier si les combinaisons de nœuds sont vides ou non. J'ai essayé les conditions ci-dessous mais elles ne fonctionnent pas. Quelqu'un a-t-il une idée de la façon de le faire fonctionner?

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

J'ai aussi essayé

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

Et aussi essayé

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

Je, alors essayé avec xsl simple: si les conditions, et ci-dessous est l'observation

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

Cependant, si j'essaie de rechercher une condition vide, c'est-à-dire

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

En outre, si j'essaie avec un == (double égal à), alors il donne l'erreur xslt. c'est à dire

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

Je voudrais de l'aide pour savoir comment obtenir mon xsl: si le test fonctionne pour vérifier plusieurs conditions. Merci d'avance.

[Edit]: Juste pour indiquer ici que la condition if où tous les nœuds ne sont pas vides fonctionne, cela ne fonctionne pas lorsque j'essaie de rechercher un autre nœud parmi les trois nœuds qui sont vides.

Pour par exemple:

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

Grâce à @IanRoberts, j'ai dû utiliser la fonction normaliser-espace sur mes nœuds pour vérifier s'ils étaient vides.

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

Essayez d’utiliser la fonction empty():

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

Ceci identifie ABC et DEF comme vides dans le sens où ils n’ont aucun nœud enfant (pas d’éléments, pas de nœuds de texte, pas d’instructions de traitement, pas de commentaires).

Mais, comme l'a souligné @Ian, vos éléments peuvent ne pas être réellement vides ou ne pas constituer votre véritable problème - vous n'avez pas montré à quoi ressemble votre entrée XML.

Une autre cause d'erreur pourrait être votre parent position dans l'arbre. Cette façon de tester les conditions ne fonctionne que si le modèle environnant correspond à l'élément parent de node ou si vous effectuez une itération sur l'élément parent de node.

1
Mathias Müller