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 :

chemin/condition alambiqué [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Points : 45
    Points
    45
    Par défaut chemin/condition alambiqué
    Bonjour,


    J'herite d'un fichier XML que j'aimerais pouvoir mettre en forme. Je dois pour un attribut trouver une valeur qui va dépendre de 4 chemins :

    si chemin1/Id a une correspondance dans chemin2/souschemin/Id
    et que chemin2/Id a une correspondance dans chemin3/Id
    en sachant que chemin2 est trouvé à la première étape.

    Voici un exemple
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <root>
        <elements>
            <elt>
                <id>elt1</id>
                <chemin1>
                    <id>e1.1</id>
                </chemin1>
                <chemin2>
                    <id>e1.2</id>
                    <souschemin>
                        <id>e1.1</id>
                    </souschemin>
                </chemin2>
                <chemin3>
                    <id>e1.2</id>
                </chemin3>
            </elt>
            <elt>
                <id>elt2</id>
                <chemin1>
                    <id>e2.1</id>
                </chemin1>
                <chemin2>
                    <id>e2.2</id>
                    <souschemin>
                        <id>e2.1</id>
                    </souschemin>
                </chemin2>
            </elt>
        </elements>
    </root>
    Ici seul elt1 rempli la condition, elt2 n'a pas la correspondance vers le chemin3.


    Quelqu'un a une idée de comment pouvoir écrire cette condition ?

    Merci d'avance
    _pirBD_

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Grosso modo :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:variable name="chemin2" select="chemin2[current()/chemin1/Id = souschemin/Id]"/>
     
    <xsl:choose>
      <xsl:when test="$chemin2/Id = chemin3/Id"/>
         ...
      </xsl:when>
      <xsl:otherwise>
         ...
      </xsl:otherwise>
    </xsl:choose>
    Peut-être qu'employer plus de variables le rendrait plus lisible.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Merci beaucoup pour la réponse

    Une dernière chose :
    Comment savoir si la variable $chemin2 contient bien quelquechose ?
    Ou de manière plus fonctionnelle, comment savoir que j'ai bien trouvé des balises pour remplir ma première condition ?
    _pirBD_

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    En XPath, tous les types peuvent être implicitement convertis en booléen quand nécessaire.

    - Un booléen => pas de conversion, ce sont déjà des booléens.
    - Un nombre => zéro positif, zéro négatif et NaN sont faux. Le reste est vrai.
    - Une string => Seule la chaîne vide est fausse.
    - Un ensemble de nœuds => Seul l'ensemble vide est faux.

    Note au passage que si $chemin2 est vide, alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test="$chemin2/Id = chemin3/Id"
    sera forcément faux, puisque $chemin2/Id est vide aussi, donc ne peut pas être égal à quoi que ce soit.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 59
    Points : 45
    Points
    45
    Par défaut
    Merci, ca marche
    _pirBD_

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/11/2010, 14h16
  2. Chemin d'accès au clip et scenario en flash
    Par Gential dans le forum Flash
    Réponses: 4
    Dernier message: 28/02/2003, 10h10
  3. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01
  4. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32
  5. Algorithme de recherche de chemin
    Par amelie gaya dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/06/2002, 15h29

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