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 :

problème avec les "conditions"


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut problème avec les "conditions"
    bonjour a vous je cherche depuis deux jours une solutions mais je ne réussis pas a faire ce que je souhaite.
    En effet, me lancant dans le xsl, j'essaye la création "d'un sheet" pour mon lecteur..
    En recherchant a droite a gauche, j'ai reussit a faire plus ou moins ce que je souhaite, mais je bloque a un endroit
    j'ai utilisé les balise <xsl:when> dans ce code
    <xsl:template match="@*|node()">
    <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
    </xsl:template>
    <xsl:template match="ImageElement[@Name='Codecaudio1']">
    <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
    <xsl:choose>
    <xsl:when test="$profileaudio1 != 'HRA_/_Core'">
    <xsl:attribute name="SourceData"><xsl:value-of select="$codec3"/></xsl:attribute>
    </xsl:when>
    <xsl:when test=" != 'MA_/_Core' ">
    <xsl:attribute name="SourceData"><xsl:value-of select="$codec4"/></xsl:attribute>
    </xsl:when>
    <xsl:otherwise >
    <xsl:attribute name="SourceData"><xsl:value-of select="$codec1"/></xsl:attribute>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:copy>
    mais le probleme c'est que meme si je n'ai pas HRA_/_Core, il me renvoie l'image correspondant a cette ligne alors que je voudrais qu'il passe a la vérification suivante...
    Merci de bien vouloir m'eclairer sur cette fonction
    cordialement

    ps: j'ai remarqué que dans le fichier source si j'ai la ligne" profile format" (qui est la source $profileaudio1) de renseigné quelque soit sa valeur le fichier xsl s'arrete a la premiere recherche et affiche la valeur correspondante au HRA / CORE

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    La logique là ne me semble pas bien définie couvrant tous les cas possibles ... et il y a des erreurs là où vous n'y attendiez peut-être pas !

    alors que je voudrais qu'il passe a la vérification suivante...
    Bien, avec cette précision, la place de $codec4 est claire; il manquer encore quelque chose : à quoi faire si c'est HRA_/_Core ou MA_/_Core : il me semble c'est de créer l'attribut SourceData avec une valeur $codec1 et $codec3 respectivement, mais c'est une spéculation sur ce que vous entendez faire.

    Et puis, si un attribut SourceData sera par chance créé, il faut excluer un match @SourceData dans xsl:apply-templates.

    A part ça, il y a une erreur que vous n'attendiez peut-être pas : c'est qu'il ne faut pas mettre le xsl:apply-templates avant tout travail sur le noeud en context soit fait comme par exemple le constructeur de xsl:attribute soit évalué - ceci est un peu plus délicat, c'est vrai.

    En tout cas, xsl:choose imbriqué peut s'écrire comme ça.
    Code xml : 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
    <!-- ne pas devoir y mettre avant le constructeur d'attribut évalué ; c'est une erreur.
    <xsl:apply-templates select="@*[local-name() !='SourceData']|node()"/>
    -->
    <xsl:choose>
        <xsl:when test="$profileaudio1 != 'HRA_/_Core'">
            <xsl:choose>
                <xsl:when test="$profileaudio1 != 'MA_/_Core'">
                    <xsl:attribute name="SourceData"><xsl:value-of select="$codec4"/></xsl:attribute>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:attribute name="SourceData"><xsl:value-of select="$codec3"/></xsl:attribute>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:when>
        <xsl:otherwise>
            <xsl:attribute name="SourceData"><xsl:value-of select="$codec1"/></xsl:attribute>
        </xsl:otherwise>
    </xsl:choose>
    <!-- replacer le ici -->
    <xsl:apply-templates select="@*[local-name() !='SourceData']|node()"/>
    Il devrait plus clair avec des tests positifs comme ça, une réécriture equivalente.
    Code xml : 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
    <!-- ne pas devoir y mettre avant le constructeur d'attribut évalué ; c'est une erreur.
    <xsl:apply-templates select="@*[local-name() !='SourceData']|node()"/>
    -->
    <xsl:choose>
        <xsl:when test="$profileaudio1 = 'HRA_/_Core'">
            <xsl:attribute name="SourceData"><xsl:value-of select="$codec1"/></xsl:attribute>
        </xsl:when>
        <xsl:when test="$profileaudio1 = 'MA_/_Core'">
            <xsl:attribute name="SourceData"><xsl:value-of select="$codec3"/></xsl:attribute>
        </xsl:when>
        <xsl:otherwise>
            <xsl:attribute name="SourceData"><xsl:value-of select="$codec4"/></xsl:attribute>
        </xsl:otherwise>
    </xsl:choose>
    <!-- replacer le ici -->
    <xsl:apply-templates select="@*[local-name() !='SourceData']|node()"/>
    Voilà !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut
    bonsoir tsuji
    premierement je tiens a vous remercier de vous "pencher sur mon cas"
    Mais pour etre franc, comme je debute et que le code que j'ai fait est réaliser aété fait a partir d'une base qui n'est pas la mienne et que j'ai réadapté et modifié pour que cela fonctionne, je dois vous avouer que je ne comprends pas trop ce que vous voulez dire.
    Mais par rapport a ce que vous m'avez repondu j'ai bien compris qu'il fallait que je revoie mon architecture.
    mais a partir d'ou???
    J'ai beau vouloir essayer de mettre mon code complet sur le fil (avec les balises codes)mais le message ne s'affiche pas .
    J'ai essayé d'aspter votre code mais la seul le dernier "choose "s'affiche alors que je remplissait la deuxieme condition

    merci pour votre aide

  4. #4
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    J'ai essayé d'aspter votre code mais la seul le dernier "choose "s'affiche alors que je remplissait la deuxieme condition
    L'évaluation de xsl:choose/xsl:when/xsl:otherwise est tout à fait procédurale, presque rien de fonctionnelle. On peut tout à fait tester cette partie sans aucune ambiguité. Immédiatement avant xsl:copy, mettez ceci et puis examinez, jusqu'à une virgule ou un point, la sortie de la balise profileaudio1, le nom est arbitraire - on peut nommer ce qu'on veut respectant tout de même les règles de nommer une balise. Si il y encore de doute dessus, on y vera après.
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <!-- ajouter ceci -->
    <profileaudio1><xsl:value-of select="$profileaudio1" /></profileaudio1>
    <!-- et continuer le reste ... -->
    <xsl:copy>
        <!-- etc etc -->
    </xsl:copy>

  5. #5
    Futur Membre du Club
    Homme Profil pro
    fonctionnaire
    Inscrit en
    Décembre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : fonctionnaire

    Informations forums :
    Inscription : Décembre 2015
    Messages : 6
    Par défaut
    bonsoir,
    ne pouvant pas mettre le code en entier voici le fichier en piece jointe..
    Je dois avouer que je suis largué..
    Merci par avance
    cordialement
    Fichiers attachés Fichiers attachés

  6. #6
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    J'ai regardé le xslt. Presque tous les templates souffrent l'erreur que j'ai souligné : il faut re-placer xsl:apply-templates après xs:choose etc où un attribut constructeur s'y trouvé. Pour ms xml, ce n'est pas une erreur fatale mais les résultats ne sont pas ce qu'on attendrait. Pour les autres implémentations, ça peut être une erreur fatale. Bref, ce n'est pas spécifiquement lié à la question soulevée. Et puis, il y a deux templates identiques (match="@*|node()"), c'est suffit d'en avoir un.

    Alors sur la question précise traitée ici, je ne vois pas quelle obstacle y en a pour empêcher mettre la mesure de débugger que j'ai proposé plus haut.
    Code xml : 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
        <xsl:template match="ImageElement[@Name='Codecaudio1']">
            <profileaudio1><xsl:value-of select="$profileaudio1" /></profileaudio1>
            <xsl:copy>
                <xsl:choose>
                    <xsl:when test="$profileaudio1 = 'HRA_/_Core'">
                        <xsl:attribute name="SourceData"><xsl:value-of select="$codec1"/></xsl:attribute>
                    </xsl:when>
                    <xsl:when test="$profileaudio1 = 'MA_/_Core'">
                        <xsl:attribute name="SourceData"><xsl:value-of select="$codec2"/></xsl:attribute>
                    </xsl:when>
                    <xsl:otherwise>
                        <xsl:attribute name="SourceData"><xsl:value-of select="$codec3"/></xsl:attribute>
                    </xsl:otherwise>
                </xsl:choose>
                <xsl:apply-templates select="@*[local-name() !='SourceData']|node()"/>
            </xsl:copy>
        </xsl:template>

    Que montre-t-elle, la balise profileaudio1, dans la sortie ?

Discussions similaires

  1. Sudo problème avec les simples quotes
    Par Tronche dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 23/03/2007, 12h02
  2. Réponses: 15
    Dernier message: 21/02/2007, 17h29
  3. Formulaires : problème avec les slashes et les quotes
    Par GarGamel55 dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 15h59

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