IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSLT]Problème sur une comparaison if avec des strings


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut [XSLT]Problème sur une comparaison if avec des strings
    Salut à tous,

    j'ai un soucis avec la condition if. Je veux comparer 2 chaînes de caractères, style string.

    La condition voulue:
    <if test="$id!=text()">
    .....
    </if>

    J'ai testé la variable id et le text() avant la condition. Ils sont identiques. Apparemment la condition n'est pas d'accord avec ça.

    J'ai aussi
    - essayé de mettre la valeur de test dans une variable. Idem, la condition est toujours vrai.
    - modifier la condition en mettant =, il rentre tout le temps dans la condition.

    Au final ma condition ne sert à rien, il rentre quand même dans le if.

  2. #2
    Membre expérimenté

    Avatar de mlny84
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    4 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 4 023
    Par défaut
    Peut être est-ce une erreur de frappe, mais si tu fais du XSL, tu devrais plutôt écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="$id!=text()">
    ...
    </xsl:if>
    Je ne crois pas que les balises <if> ... </if> existent...

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut
    C vrai que je n'ai pas tout mis.
    Le fichier est un xslt (mais je ne crois pas que ça change grand chose).

    La transformation se fait à partir d'une application en C# par les classes dispo. Je n'utilise pas "l'interpréteur" des navigateurs (enfin je suppose).

    Ceci fonctionne avec d'autres fichiers sans aucun soucis.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut
    Je viens d'essayer en dur par text()!='CC' => ça fonctionne
    par contre $ID!=CC ne fonctionne pas.

    $ID est une variable globale. Quand je visualise sa valeur, je n'ai pas de problème.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut
    Voilà le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?xml version="1.0" encoding="UTF-8" ?>
    <stylesheet version="2.0" xmlns="http://www.w3.org/1999/XSL/Transform">
      <variable name="ID" select="XXXX/YYYY/IDENTIFIANT/text()"/>
     
      <template match="*">
        <element name="{name()}" >
          <apply-templates select="* | text()"/>
        </element>
      </template>
     
      <template match="IDENTIFIANT">
        <variable name="id_courant" select="text()"/>
        <if test="$ID != text()">
            <text>ERREUR</text>
        </if>   
      </template>
     
    </stylesheet>
    Normalement le $ID prend la première valeur de l'identifiant de l'ensemble de noeuds. L'objectif est que cette identifiant soit le même pour tous.

  6. #6
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Pourquoi ne pas mettre explicitement de ne prendre que la première valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <variable name="ID" select="XXXX/YYYY/IDENTIFIANT/text()[1]"/>
    Dans le genre, forcer la conversion en chaine par la fonction string() peut aussi résoudre certains problèmes...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Août 2007
    Messages : 180
    Par défaut
    Effectivement, tu es un membre éclairé.

    J'ai fait string($ID), ça fonctionne.

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2013, 09h46
  2. Réponses: 5
    Dernier message: 30/06/2009, 23h21
  3. Calcul sur une feuille excel avec un string
    Par ubssecurities dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/08/2008, 15h34
  4. [XSLT] Problème sur une comparaison de deux noeuds
    Par NicaeaCivitas dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 09/01/2007, 11h51
  5. Problème sur une requete avec champ date
    Par islande dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2006, 19h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo