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 :

Modifier des éléments avant de les copier


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut Modifier des éléments avant de les copier
    Bonjour,

    j'ai la feuille xsl suivante (merci GrandFather):

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
     
    <xsl:template match="/">
    	<xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
     
    <xsl:template match="nom">
      <xsl:variable name="position-dernier" select="count(following-sibling::*[not(self::nom)]) - count(following-sibling::nom/following-sibling::*[not(self::nom)])"/>
      <personne>
        <xsl:copy-of select="."/>
        <xsl:copy-of select="following-sibling::*[position() &lt;= $position-dernier]"/>
      </personne>
    </xsl:template>
     
    <xsl:template match="prenom"/>
    <xsl:template match="age"/>
    <xsl:template match="e-mail"/>
    <xsl:template match="article"/>
     
    </xsl:stylesheet>
    qui ajoute de la hiérarchie à l'xml plat suivant :

    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
     
    <data>
    <nom>dupont</nom>
    <prenom>martin</prenom>
    <age>25</age>
    <e-mail>blabla@yahoo.bla</e-mail>
    <article>chaussure</article>
    <article>table</article>
    <article>livres</article>
    <article>ordinateur</article>
    <nom>john</nom>
    <prenom>john</prenom>
    <age>10</age>
    <e-mail>blabla@gmail.bla</e-mail>
    <article>vélo</article>
    <article>chaussure</article>
    <nom>peter</nom>
    <prenom>pete</prenom>
    <age>55</age>
    <e-mail>blabla@hotmail.bla</e-mail>
    <article>verre</article>
    </data>
    pour produire en sortie :

    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
     
    <data>
      <personne>
        <nom>dupont</nom>
        <prenom>martin</prenom>
        <age>25</age>
        <e-mail>blabla@yahoo.bla</e-mail>
        <article>chaussure</article>
        <article>table</article>
        <article>livres</article>
        <article>ordinateur</article>
      </personne>
      <personne>
        <nom>john</nom>
        <prenom>john</prenom>
        <age>10</age>
        <e-mail>blabla@gmail.bla</e-mail>
        <article>vélo</article>
        <article>chaussure</article>
      </personne>
      <personne>
        <nom>peter</nom>
        <prenom>pete</prenom>
        <age>55</age>
        <e-mail>blabla@hotmail.bla</e-mail>
        <article>verre</article>
      </personne>
    </data>
    ma question est : comment serait-il possible de regrouper les éléments <article> dans un élément plus englobant <achats> avant de les copier? J'ai essayé de mettre un dans le mais ça ne marche pas.

    D'avance merci à celui qui résoudra ce problème épineux parce que moi je ne sais plus quoi faire.

  2. #2
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    comment serait-il possible de regrouper les éléments <article> dans un élément plus englobant <achats> avant de les copier?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <achats>
    <xsl:apply-templates/>
    </achats>
     
     
    <xsl:template match="article">
    <article>
    <xsl:value-of select=". ou text()"/>
    </article>

    ???
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

  3. #3
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Bonjour Laurentibus,

    je ne suis pas sûr de bien comprendre ta réponse, où dois-je insérer le code que tu a mis dans ma feuille xslt (cf. premier post) pour passer de ça :

    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
     
    <data>
    <nom>dupont</nom>
    <prenom>martin</prenom>
    <age>25</age>
    <e-mail>blabla@yahoo.bla</e-mail>
    <article>chaussure</article>
    <article>table</article>
    <article>livres</article>
    <article>ordinateur</article>
    <nom>john</nom>
    <prenom>john</prenom>
    <age>10</age>
    <e-mail>blabla@gmail.bla</e-mail>
    <article>vélo</article>
    <article>chaussure</article>
    <nom>peter</nom>
    <prenom>pete</prenom>
    <age>55</age>
    <e-mail>blabla@hotmail.bla</e-mail>
    <article>verre</article>
    </data>
    à ça :

    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
    32
    33
    34
     
    <data>
      <personne>
        <nom>dupont</nom>
        <prenom>martin</prenom>
        <age>25</age>
        <e-mail>blabla@yahoo.bla</e-mail>
        <achats>
    	    <article>chaussure</article>
    	    <article>table</article>
    	    <article>livres</article>
    	    <article>ordinateur</article>
        </achats>
      </personne>
      <personne>
        <nom>john</nom>
        <prenom>john</prenom>
        <age>10</age>
        <e-mail>blabla@gmail.bla</e-mail>
        <achats>
    	    <article>vélo</article>
    	    <article>chaussure</article>
        </achats>
      </personne>
      <personne>
        <nom>peter</nom>
        <prenom>pete</prenom>
        <age>55</age>
        <e-mail>blabla@hotmail.bla</e-mail>
        <achats>
        	<article>verre</article>
        </achats>
      </personne>
    </data>
    Merci beaucoup,

  4. #4
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    ca tu l insere ou tu veux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:template match="article">
    <article>
    <xsl:value-of select=". ou text()"/>
    </article>

    et ca tu l insere apres ton traitement de la balise emails
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <achats>
    <xsl:apply-templates/>
    </achats>
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

  5. #5
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Justement je n'ai pas de traitement spécifique pour la balise e-mail, j'utilise un copy-of et j'ai l'impression qu'on ne peut pas intercepter le flux xml à l'intérieur de ce copy-of pour lui dire "ok tu copies tout sauf les noeuds <article> que tu englobes d'abord avec une balise <achats> et ensuite tu les copies.

  6. #6
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    ah ben alors faut pas que tu fasse un copy off mais un traitement dans le meme style que le template match=article que je t est écrit
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

  7. #7
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    J'ai résolu mon problème en utilisant plusieurs feuilles xsl, chacune faisant un regroupement puisque je ne peut pas intervenir dans le xsl:copy-of et que j'ai vraiment besoin de l'utiliser.

    Merci de ton aide laurentibus

    @+

  8. #8
    Membre éprouvé Avatar de laurentibus
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 908
    Points
    908
    Par défaut
    de rien
    ++
    ... un flash ... et ça repart

    700R ... catch me if u can

    Best regards,
    .

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

Discussions similaires

  1. Stocker des valeurs avant de les écraser
    Par guillome29 dans le forum IHM
    Réponses: 36
    Dernier message: 31/05/2013, 09h23
  2. [Débutant] Modifier des éléments liés
    Par kheironn dans le forum ASP.NET MVC
    Réponses: 1
    Dernier message: 17/05/2013, 09h33
  3. Rechercher des éléments avant et après
    Par crislab dans le forum Requêtes
    Réponses: 3
    Dernier message: 11/11/2009, 09h57
  4. verifier des champ avant de les poster
    Par chrisl0 dans le forum Langage
    Réponses: 17
    Dernier message: 10/02/2009, 13h47
  5. Les styles des éléments avant/après compilation
    Par Mysti¢ dans le forum wxPython
    Réponses: 2
    Dernier message: 14/06/2007, 17h07

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