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 :

[XML - XSLT] Plusieurs xslt pour un fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut [XML - XSLT] Plusieurs xslt pour un fichier xml
    Bonjour
    Je voudrais savoir s'il est possible de faire appel a 2 fichiers xslt sur un meme fichier xml.

    En fait je voudrais dans un premier temps modifier mon fichier xml en un autre fichier xml via une xslt.

    Puis mettre en page (pour une transformation xml en xhtml) mon fichier xml precedemment modifié via une seconde xslt.

    J'ai essayé de mettre mes 2 xslt dans une meme page xslt mais je n'ai pas réussi a la faire marcher.

    Merci d'avance pour vos réponses.

  2. #2
    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
    Bonjour,

    oui c'est possible, à condition de mettre en place un workflow XML, c'est à dire une application qui va lancer en séquence les transformations (ça peut être un simple fichier batch). Mais en pratique, c'est rarement utile sauf pour les transformations très complexes qui ne seraient pas pratiques ou impossibles à faire en une seule passe. Généralement, au prix d'une analyse un peu plus poussée du problème, on arrive à fusionner les deux feuilles de style XSL en une seule.

    Si tu nous exposes ton problème, on peut t'aider à passer de deux feuilles à une seule.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    merci de ta réponse.

    J'ai un fichier xml :

    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
     
    <doc  background="image.jpg">
    <PP01 x="18px" y="8px" l="561px" h="480px">
        <date>123</date>
        <titre>titre</titre>
    </PPO1>
    <X01 x="18px" y="490px" l="192px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X01>
    <X02 x="214px" y="490px" l="182px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X02>
    </doc>
    Avec ma premiere xslt je le modifie pour obtenir :
    xml :

    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
     
    <doc  background="image.jpg">
    <bloc name="PP01" x="18px" y="8px" l="561px" h="480px">
        <date>123</date>
        <titre>titre</titre>
    </PPO1>
    <bloc name="X01" x="18px" y="490px" l="192px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X01>
    <bloc name="X02" x="214px" y="490px" l="182px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X02>
    </doc>
    avec la xslt suivante :
    ps : c toi qui m'a donne la solution de ma xslt pour modifier mon xml et encore merci

    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
     
     <xsl:template match="GB03H">
        <doc> 
          <xsl:for-each select="*"> 
            <bloc> 
              <!-- on recopie les attributs --> 
              <xsl:copy-of select="@*"/> 
              <xsl:attribute name="name"><xsl:value-of select="name()"/></xsl:attribute> 
              <!-- on recopie le contenu de l'élément, élément par élément --> 
              <xsl:for-each select="*"> 
                <xsl:copy-of select="."/> 
              </xsl:for-each> 
            </bloc> 
          </xsl:for-each> 
        </doc> 
      </xsl:template>
    Puis dans un deuxième temps je voudrais mettre en page mon xml modifié :
    xml
    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
     
    <doc  background="image.jpg">
    <bloc name="PP01" x="18px" y="8px" l="561px" h="480px">
        <date>123</date>
        <titre>titre</titre>
    </PPO1>
    <bloc name="X01" x="18px" y="490px" l="192px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X01>
    <bloc name="X02" x="214px" y="490px" l="182px" h="158px">
        <date>132</date>
        <titre>titre2</titre>
    </X02>
    </doc>
    avec la xslt suivante :

    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
     
    <xsl:template match="bloc" name="bloc">
      <xsl:for-each select="bloc">
        <xsl:if test="substring-before(@name,'0') = 'PP'">
          <div id="{@name}" style="position:absolute;left:{@x};top:{@y};width:{@l};height:{@h}; border-right: fuchsia thin solid; border-top: fuchsia thin solid; border-left: fuchsia thin solid; border-bottom: fuchsia thin solid;">
            <div id="date" style="width:66%;height:66%;border-right: #FFFF00 thin solid; border-top: #FFFF00 thin solid; border-left: #FFFF00 thin solid; border-bottom: #FFFF00 thin solid;">
             <xsl:value-of select="date" />
            </div>
            <div id="titre" style="position:absolute;left:66%;top:0;width:33%;height:66%;border-right: #00FFFF thin solid; border-top: #00FFFF thin solid; border-left: #00FFFF thin solid; border-bottom: #00FFFF thin solid;">
              <xsl:value-of select="titre" />
            </div>
         </div>
        </xsl:if>
        <xsl:if test="substring-before(@name,'0') = 'X'">
          <div id="{@name}" style="position:absolute;left:{@x};top:{@y};width:{@l};height:{@h}; border-right: fuchsia thin solid; border-top: fuchsia thin solid; border-left: fuchsia thin solid; border-bottom: fuchsia thin solid;">
            <div id="Div1" style="width:66%;height:66%;border-right: #FFFF00 thin solid; border-top: #FFFF00 thin solid; border-left: #FFFF00 thin solid; border-bottom: #FFFF00 thin solid;">
               <xsl:value-of select="date" />
            </div>
            <div id="Div2" style="font-weight:bold;color: red;position:absolute;left:66%;top:0;width:33%;height:66%;border-right: #00FFFF thin solid; border-top: #00FFFF thin solid; border-left: #00FFFF thin solid; border-bottom: #00FFFF thin solid;">
              <xsl:value-of select="titre" />
            </div>
           </div>
        </xsl:if>
      </xsl:for-each>
    </xsl:template>
     
    <body background="{@background}">
          <xsl:call-template name="bloc" />
    </body>
    Voila j'espere que c comprehensible

    merci

  4. #4
    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
    Une question : quel est l'intérêt de ce format XML intermédiaire, celui qui contient les éléments <bloc> ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Je pensais que pour lire mon fichier xml, il fallait que les noeuds ont la meme etiquette.

    Pour <xsl:for-each select="bloc"> par exemple.

    Je n'ai pas trouvé comment faire si les noeuds n'ont pas la meme etiquette.

    Et puis pour mes "if" il me faut le nom de l'etiquette et je ne sais pas non plus comment la recuperer.

  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 : 47
    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 quoi une etiquette pour toi ?

    A t'ecouter on dirait que tu ne peux ou ne veux mofifier le dernier xslt , pour se passer du premier ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    heu une etiquette pour moi c'est

    <PPO1>
    <XO1>
    ...

    c le nom que l'on donne au noeud.

    Et oui je veux modifier ma seconde xslt si on peut se passer de la premiere ms je ne vois pas trop comment on peut faire.

    Si ca peut se faire ca serait cool

    Merci

  8. #8
    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
    Citation Envoyé par Laure888
    Je pensais que pour lire mon fichier xml, il fallait que les noeuds ont la meme etiquette.

    Pour <xsl:for-each select="bloc"> par exemple.

    Je n'ai pas trouvé comment faire si les noeuds n'ont pas la meme etiquette.
    Non, tu peux utiliser le caractère joker *, qui désigne n'importe quel élément.
    Citation Envoyé par Laure888
    Et puis pour mes "if" il me faut le nom de l'etiquette et je ne sais pas non plus comment la recuperer.
    En utilisant comme je l'ai fait la fonction XPath name(), qui renvoie le nom de l'élément courant. Je t'incite à consulter les tutoriaux XML présents sur ce site...

    Ton fichier HTML peut directement être généré à partir du XML de départ avec ce 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
    19
    20
    21
    22
    23
    <xsl:template match="*">
      <xsl:choose>
        <xsl:when test="substring(name(),1,2) = 'PP'">
          <div id="{name()}" style="position:absolute;left:{@x};top:{@y};width:{@l};height:{@h}; border-right: fuchsia thin solid; border-top: fuchsia thin solid; border-left: fuchsia thin solid; border-bottom: fuchsia thin solid;"> 
            <div id="date" style="width:66%;height:66%;border-right: #FFFF00 thin solid; border-top: #FFFF00 thin solid; border-left: #FFFF00 thin solid; border-bottom: #FFFF00 thin solid;"> 
             <xsl:value-of select="date" /> 
            </div> 
            <div id="titre" style="position:absolute;left:66%;top:0;width:33%;height:66%;border-right: #00FFFF thin solid; border-top: #00FFFF thin solid; border-left: #00FFFF thin solid; border-bottom: #00FFFF thin solid;"> 
              <xsl:value-of select="titre" /> 
            </div> 
        </xsl:when>
        <xsl:when test="substring(name(),1,1) = 'X'">
          <div id="{name()}" style="position:absolute;left:{@x};top:{@y};width:{@l};height:{@h}; border-right: fuchsia thin solid; border-top: fuchsia thin solid; border-left: fuchsia thin solid; border-bottom: fuchsia thin solid;"> 
            <div id="Div1" style="width:66%;height:66%;border-right: #FFFF00 thin solid; border-top: #FFFF00 thin solid; border-left: #FFFF00 thin solid; border-bottom: #FFFF00 thin solid;"> 
               <xsl:value-of select="date" /> 
            </div> 
            <div id="Div2" style="font-weight:bold;color: red;position:absolute;left:66%;top:0;width:33%;height:66%;border-right: #00FFFF thin solid; border-top: #00FFFF thin solid; border-left: #00FFFF thin solid; border-bottom: #00FFFF thin solid;"> 
              <xsl:value-of select="titre" /> 
            </div> 
           </div> 
        </xsl:when>
      </xs:choose>
    </xsl:template>
    Dans ce cas, il vaut mieux utiliser choose/when plutôt que if. choose/when est l'équivalent du switch/case d'autre langages.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  9. #9
    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 : 47
    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
    deja je ne comprends pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <doc  background="image.jpg"> 
    <bloc name="PP01" x="18px" y="8px" l="561px" h="480px"> 
        <date>123</date> 
        <titre>titre</titre> 
    </PPO1> 
    <bloc name="X01" x="18px" y="490px" l="192px" h="158px"> 
        <date>132</date> 
        <titre>titre2</titre> 
    </X01> 
    <bloc name="X02" x="214px" y="490px" l="182px" h="158px"> 
        <date>132</date> 
        <titre>titre2</titre> 
    </X02> 
    </doc>
    qui est faux

    ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template match="bloc" name="bloc"> 
      <xsl:for-each select="bloc">
    Tu est deja sur les noeud bloc cela voudrait dire que tu as des noeuds bloc qui ont des fils bloc ?


  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    oui en effet mon fichier xml est faux.
    j'ai fait du copier coller du premier et j'ai oublie de renommer mes balises fermantes.

    merci pour vos reponses

    je vais essayer le code de GrandFather.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 43
    Points : 20
    Points
    20
    Par défaut
    Merci bcp pour vos réponses ça marche exactement comme je voulais

    Encore merci

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

Discussions similaires

  1. Diviser un fichier XML en plusieurs fichiers XML avec XSLT
    Par bobkorn dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/04/2008, 12h13
  2. [XSLT] transfo d'un fichier XML en plusieurs fichiers XML
    Par doudou_rennes dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2006, 12h01
  3. [XSLT] Choisir parmi plusieurs XSL pour un ficher XML
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 05/09/2006, 12h31
  4. [XSLT] Diviser un fichiers xml en plusieurs pages html
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/04/2005, 16h56
  5. [XSLT] Récupération du nom du fichier XML analysé
    Par Patkaza dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/01/2005, 11h28

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