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][débutant]trié l'ordre des éléments d'un fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 85
    Points
    85
    Par défaut [XSL][débutant]trié l'ordre des éléments d'un fichier xml
    J'ai un fichier XML assez long et complexe dans lequel je souhaite ordonné certains enfants du même parent en fonction d'un attribut...

    Ne connaissant pas énormément XSL, j'aimerai savoir s'il existe un moyen simple de trié une partie précise d'un arbre XML ou si je suis obligé de recréer tout l'arbre (avec des "copy"), jusqu'à l'endroit que je veut ordonné?

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Non tu peux utilisé xsl:sort pour les trier (numériquement ou textuellement)!

    Seul contrainte pour que ca marche il doit être fils de xsl:apply-templates ou de xsl:for-each.


    ++

    Thierry
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 85
    Points
    85
    Par défaut
    Alors je dois mal m'y prendre : le but est d'avoir exactement le meme fichier XML mais avec des éléments triés à un endroit :

    En simplifiant mon code, j'ai les éléments fils issus du père A/B/C/D/E/F à trier en fonction de G/@ID, voici le code XSLT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output method="xml" version="1.0" indent="no" />   
     
        <xsl:template match="/">
            <xsl:copy-of select="A" />
        </xsl:template>
        <xsl:template match="A/B/C/D/E/F">
            <xsl:apply-templates>
                <xsl:sort  select="G/@ID "  data-type="number"></xsl:sort>
            </xsl:apply-templates>
        </xsl:template>
    </xsl:stylesheet>

  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
    Bonjour,

    le template correspondant à l'élément F ne sera jamais appelé, du fait du copy-of qui fait une copie récursive mais n'appelle pas les templates des noeuds qu'il recopie. Il faut faire un traitement générique sur les éléments, et faire un traitement spécifique pour le parent de l'élément à trier.

    Essaie plutôt ceci :

    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
     
    <xsl:template match="*">
      <xsl:copy>
        <xsl:apply-templates select="*"/>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="E">
      <xsl:copy>
        <xsl:apply-templates select="F">
          <xsl:sort select=G/@ID data-type="number"/>
        </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
     
    <xsl:template match="F">
      <xsl:copy-of select="."/>
    </xsl:template>
    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 régulier
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 85
    Points
    85
    Par défaut
    Merci GrandFather pour ton aide, j'ai essayé avec ton code mais ça ne fonctionne pas mieux...

    j'ai opté pour une reconstruction progressive de mon fichier XML en triant certaines parties. C'est surement pas la solution la plus optimisée mais ça me permet d'apprendre le XSL...

    Je n'arrive toujours pas à trier mes éléments dans un "apply-templates".

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:apply-templates select="Properties/KeyValuePair">
        <xsl:sort select="Properties/KeyValuePair/@Key" data-type="text" />
    </xsl:apply-templates>
     
    ...
     
    <xsl:template match="KeyValuePair">
        <KeyValuePair>
            <xsl:copy-of select="@*" />
        </KeyValuePair>
    </xsl:template>
    Les KeyValuePair ne contiennent que 2 attributs et je voudrais les ordonner en fonction de l'attribut "Key" qui est sous format texte...

    Est-ce que quelqu'un voit ce qui cloche?

    Merci d'avance

  6. #6
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 88
    Points : 85
    Points
    85
    Par défaut
    Quel c.n!

    dans le "xsl:sort" il suffisait de mettre @Key et non le chemin complet...

    Problème résolu!

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

Discussions similaires

  1. [JDOM] Ajouter des éléments dans un fichier XML
    Par pitchu dans le forum Format d'échange (XML, JSON...)
    Réponses: 14
    Dernier message: 25/12/2015, 10h06
  2. Réponses: 6
    Dernier message: 18/09/2009, 09h35
  3. [SAX] Récuperation des éléments d'un fichier XML
    Par EmmaEmy dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 02/09/2009, 15h51
  4. [XSL] Ordre des éléments présentés
    Par Cupidon dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/01/2006, 13h58
  5. Récupération des éléments d'un fichier xml en flux retour
    Par opeo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/11/2005, 10h33

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