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 :

Transformation XSL : Utilisation de Template + tri par rapport à un attribut


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Homme Profil pro
    Analyste Développeur
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Développeur

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut Transformation XSL : Utilisation de Template + tri par rapport à un attribut
    Bonjour,

    Je suis débutant en XSL. Je suis face à une problématique, je vais essayer de vous décrire celle-ci du mieux possible, mais si je ne suis pas claire n'hésitez pas à me le dire pour plus de détails.

    Je dois actuellement faire l'interface (et l'import de donnée) dans un logiciel. Je dispose d'un fichier source *.xml que je dois transformer. Pour le moment j'utilise de simples templates avec des tests d'existante (xsl:if). Donc rien de très compliqué. Par contre lors de mon traitement sur le fichier xml de résultat, je me suis rendu compte que les différents nœuds n'étaient pas dans la bonne ordre (je dois gérer une arborescence au final).

    Je souhaite donc mettre en ordre des éléments selon un élément fils :

    Exemple :

    Avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ELEMENT>
         <NUM>5</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
     
    <ELEMENT>
         <NUM>3</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
     
    <ELEMENT>
         <NUM>1</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
    Après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <ELEMENT>
         <NUM>1</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
     
    <ELEMENT>
         <NUM>3</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
     
    <ELEMENT>
         <NUM>5</NUM>
         <AUTREELEMENT/>
    </ELEMENT>
    Tout en sachant comme je le dis plus haut que j'applique une template sur ELEMENT et les différents éléments enfant.

    J'essaye donc pour le moment d'utiliser xsl:sort en plus de xsl:apply-templates. Mais cela ne donne pas grande chose.

    Merci pour votre aide.

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Je ne parle que en terme quelque peu général. Supposons que les éléments ELEMENT ne forment qu'un block les unes à coté des autres.
    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
    21
    22
    23
    24
    <X>
        <some-element>etc</some-element>
        <!-- etc etc -->
        <some-element>etc</some-element>
     
        <ELEMENT>
            <NUM>5</NUM>
            <AUTREELEMENT/>
        </ELEMENT>
     
        <ELEMENT>
            <NUM>3</NUM>
            <AUTREELEMENT/>
        </ELEMENT>
     
        <ELEMENT>
            <NUM>1</NUM>
            <AUTREELEMENT/>
        </ELEMENT>
     
        <some-other-element>etc</some-other-element>
        <!-- etc etc -->
        <some-other-element>etc</some-other-element>
    </X>
    Alors, le template travailleur à côté de la transformation identique puisse 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
    <xsl:template match="*[ELEMENT]">
        <xsl:copy>
            <xsl:apply-templates select="*[local-name() != 'ELEMENT' and following-sibling::ELEMENT]" />
            <xsl:apply-templates select="ELEMENT">
                <xsl:sort select="NUM" data-type="number" order="ascending" />
            </xsl:apply-templates>
            <xsl:apply-templates select="*[local-name() != 'ELEMENT' and not(following-sibling::ELEMENT)]" />
            <xsl:copy-of select="@*" />
        </xsl:copy>
    </xsl:template>
    Je le propose sans faire un testing préalable. Si vous voyez qu'il ne marche pas, dites-le et je vais faire quelque testing.

    édition
    J'ai enlevé une faute de frappe (un crochet "]" accidental au milieu) dans le troisième xsl:apply-templates.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Analyste Développeur
    Inscrit en
    Mai 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Développeur

    Informations forums :
    Inscription : Mai 2013
    Messages : 23
    Points : 18
    Points
    18
    Par défaut
    Merci pour ton aide, je vais tester ça surement dans la journée. Sinon j'ai oublié de préciser que c'est la version XML 1 que j'utilise.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Citation Envoyé par suiX- Voir le message
    Sinon j'ai oublié de préciser que c'est la version XML 1 que j'utilise.
    Tu sais, personne n'utilise la 1.1, il y a trop de problèmes de compatibilité -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Tri par rapport au précédent
    Par AciDation dans le forum Langage SQL
    Réponses: 7
    Dernier message: 30/12/2006, 17h31
  2. tri par rapport à une liste dans la clause where
    Par umbakrail dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/07/2006, 12h32
  3. Tri par rapport à une liste de clés primaires
    Par yoyot dans le forum Langage SQL
    Réponses: 10
    Dernier message: 23/06/2006, 13h48
  4. [XSL] utilisation des templates
    Par KibitO dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 16/12/2005, 16h54
  5. [FLASH 8] DataGrid - tri par rapport à la colonne
    Par aldo-tlse dans le forum Flash
    Réponses: 10
    Dernier message: 02/12/2005, 17h28

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