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 :

[XSL] Variable


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut [XSL] Variable
    Salut !

    J'ai besoin de choisir parmis une 50 occurence (en fait, une table de reference) et en fonction de l'occurence, renseigner 2 variables.
    Ca m'embete de faire :
    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
     
    <xsl:variable name="var1">
        <xsl:choose>
           <xsl:when test="occurence1">val1</xsl:when>
           <xsl:when test="occurence2">val2</xsl:when>
           ...
           <xsl:when test="occurenceN">valN</xsl:when>
        </xsl:choose>
    </xsl:variable>
    <xsl:variable name="var2">
        <xsl:choose>
           <xsl:when test="occurence1">valdeux1</xsl:when>
           <xsl:when test="occurence2">valdeux2</xsl:when>
           ...
           <xsl:when test="occurenceN">valdeuxN</xsl:when>
        </xsl:choose>
    </xsl:variable>
    parceque je dois ecrire deux fois mes occurence et parcourir deux fois le N occurences... Quand c'est la 50ème qui est a selectionner, c'est embétant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:choose>
      <xsl:when test="occurence1">
         <xsl:variable name"var1">val1</xsl:variable>
         <xsl:variable name"var2">valdeux1</xsl:variable>
      </xsl:when>
      <xsl:when test="occurence2">
         <xsl:variable name"var1">val2</xsl:variable>
         <xsl:variable name"var2">valdeux2</xsl:variable>
      </xsl:when>
    ...
    </xsl:choose>
    n'est pas correct, puisque la variable alors déclarée n'est valable que dans le <when>

    Existe t-il un solution pour faire cela ??

    NB : Si besoin, je peux mettre des fonctions VBS...

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 434
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 434
    Points : 15 806
    Points
    15 806
    Par défaut
    tu utilise tes variables pour faire quoi ensuite ?

  3. #3
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    J'utilise les variables pour : tester leur valeure et en fonction fabriquer des valeurs... (pure ou concaténation)
    N.B. : je teste, parceque je n'ai pas le droit de fournir des valeures null je ne doir pas exporter dans ce cas...

    Merci

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    c'est pas clair je comprends pas la logique des 50 test

  5. #5
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    en gros, le xsl seras utilisé sur une 50ène de filiales différentes. Le xml à transformer fournis l'origin (1 cas sur la 50ène).
    il existe une table de référence qui dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     - filiale 1 => entete1, val1
     - filiale 2 => entete2, val2
     - ...
     - filiane n => enteten, valn
    je souhaite donc en 1 passe recupérer mes deuc valeures : entete et val.

    Suis-je plus clair ??

    Merci

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    ce que je ne comprends pas c'est ton xml,on a l'impression qu'il y a des donnees dans ton xsl ce qui est une aberration autrement je vois pas l'interet des 50 tests

  7. #7
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Effectivement Erwy, j'ai l'impression qu'il y a quelques données qui nous manquent ...

    La seule hypothèse valable pour que des données variables soit traitées dans le XSL plutôt que récupérées dans le XML serait que NoisetteProd n'ait pas la main sur les fichiers XML.

    Si c'est le cas, il serait peut-être plus profitable de passer les variables au processeur XSL via des balises <xsl:param> plutôt que de les générer dans le XSL. Comme cela, pas besoin de modifier et de déployer les feuilles XSL en cas d'ouverture d'une cinquante-et-unième filiale.

    Je chauffe :

  8. #8
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Tu chauffe effectivement !

    1°) le but de ce XSL est de faire XML =>XSL => XML ou le XML resultat est dans un format tres précis (référenciel)

    2°) je n'ais pas la main sur le XML, c'est une appli qui le genere (en faite, c'est le resultat d'un select sur une base de donnée).

    3°) effectivement, j'ai des données dans mon XSL, je n'ai pas le choix, puisqu'il faut que je mette en adéquation l'XML résultat à un format donné, et que ce format comprends des tables de références. (cf au dessus)

    4°)Si il y a une 51ème entité, pas de problème, puisque l'avantage de mettre cette table de référence, c'est que le XSL est valable pour TOUTES les entitées. Il ne faudras donc modifier qu'un fichier et le distribuer (VIVE LA TELEDISTRIBUTION !!!!!)

    5°) Avec le XSLARAM, ne suis je pas oubliger également de passer deux fois en revu mes 50 IF ???

    Merci de votre aide !!

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Rien ne t'oblige absolument à mettre cette table de référence dans ton XSL.

    Tu peux très bien la mettre dans un fichier XML distinct, et y faire référence dans ton XSL avec la fonction document() et une requête XPath pour retrouver l'occurence qui va bien.

    Le gros avantage est qu'en cas d'ajout d'une filiale, tu n'as pas à toucher à ton XSL (c'est délicat ces petites bêtes la !), tu n'as qu'à éditer ton fichier XML contenant la table et à le diffuser.

  10. #10
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    heu... j'a oublier une contrainte... J'ai le droit qu'a un fichier XSL....

  11. #11
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par NoisetteProd
    heu... j'a oublier une contrainte... J'ai le droit qu'a un fichier XSL....
    tu veux dire que tu ne peux pas generer un autre xml?????
    Tu ne peux pas t'aaranger parce qu'en maintenance ta solution va poser des gros pb,et puis si tu as besoin des donnees de ton xsl(par habitude les promesse du genres :"mais non on n'y touchera plus maintenant",j'y crois plus ),tu seras oblige de parser ton xsl avec un autre xsl ca va devenir marrant
    GrandFather>>c'est aussi la solution a laquelle je pensais

  12. #12
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Si vraiment tu n'as pas d'autres choix que de traiter ces données dans ton XSL, tu peux faire la chose suivante :

    Utilise la fonction document() sans paramètre, elle te renverra la racine de ton XSL. Sers-t-en pour accéder à la table qui y est incorporée. Ca donnerait un truc du genre :
    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
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:filiales="Table des filiales">
     
    <filiales:table>
      <filiales:filiale name="filiale1">
        <filiales:entete>Entete1</filiales:entete>
        <filiales:val>Val1</filiales:val>
      </filiales:filiale>
      <filiales:filiale name="filiale2">
        <filiales:entete>Entete2</filiales:entete>
        <filiales:val>Val2</filiales:val>
      </filiales:filiale>
      ...
    </filiales:table>
     
    <xsl:template match="/">
      ...
      <xsl:variable name="entete">
        <xsl:value-of select="document('')/*/filiales:table/filiales:filiale[@name=$occurence]/filiales:entete"/>
      </xsl:variable>
     
      <xsl:variable name="val">
        <xsl:value-of select="document('')/*/filiales:table/filiales:filiale[@name=$occurence]/filiales:val"/>
      </xsl:variable>
      ...
    </xsl:template>
    ...
    Tu dois évidemment adapter ce code à ton cas, notamment en ce qui concerne l'accès à occurence (ici on suppose qu'elle est contenue dans la variable $occurence).

  13. #13
    Membre émérite
    Avatar de NoisetteProd
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    1 905
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 905
    Points : 2 614
    Points
    2 614
    Par défaut
    Ok ! Je test ca !

    Ca seras plus propre que mon Variable = enteteval¤val

    et apres, je faisais un substring-before (Variable, '¤')
    ou un substring-after(variable, '¤')

    Merci !

Discussions similaires

  1. Interpréter un xsl:variable contenant une expression xpath
    Par Nico_60190 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/03/2012, 16h01
  2. [XSLT][Javascript] recup/modif xsl:variable depuis javascript
    Par hjn31 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/09/2009, 11h25
  3. xsl variable et boucle maitrisée
    Par jubourbon dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/01/2009, 16h28
  4. [XSL] Variable, soustraction
    Par Mil17 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 08/08/2007, 16h34
  5. XSL:variable...comment ça marche
    Par fidififouille dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 19/06/2004, 00h12

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