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 :

[XSLT]Modifier l'ordre des balises XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut [XSLT]Modifier l'ordre des balises XML
    Bonjour voilà :

    je dois faire une comparaison de fichiers XML et pour ceci, je souhaiterais trier mes fichiers xml avant la comparaison :

    pas sur le contenu mais sur la structure

    exemple :
    j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a>
    <c>1</c>
    <b>2</b>
    </a>
    et je souhaite obtenir après transformation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <a>
    <b>2</b>
    <c>1</c>
    </a>
    que le tri ne se fasse pas sur le 1 et le 2 mais sur le nom des balises "b" et "c"
    xsl:sort semble nécessiter une localisation de noeud et trier sur le contenu,..;

    merci d'avance pour votre aide
    Philippe

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    je propose ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="/">
        <xsl:apply-templates select ="*">
    </xsl:template>
    <xsl:template match="*">
        <xsl:copy>
          <xsl:apply-templates select ="node()">
            <xsl:sort select="a"/>
            <xsl:sort select="b"/>
            <xsl:sort select="c"/>
          </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
    <xsl:template match="text()|@*"><xsl:copy/><xsl:template>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    Merci pour la réponse,

    mais ça implique de les connaître et de les nommer (<xsl:sort select="nomdu noeud" >,
    je voudrais faire ce genre de tri sur un fichier de 500Mo

    vous n'avez pas une autre idée ?

    Philippe

  4. #4
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    mais ça dépend quels sont tes critères de trie...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    l'idée c'est d'avoir 36 000 balises dans ce document, quasiment toues différentes :

    pour chaque niveau, en avançant progressivement de la racine vers les feuilles, on trie les balises alphabétiquement par leur nom

    j'ai essayé d'appliquer ton code mais il ne veut pas, il me dit que je ne peux pas utiliser xsl:sort ici,...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    en fait, je ne veux pas faire un tri de contenu mais un tri sur la structure

    je vais devoir faire une comparaison de deux fichiers xml pour voir la différence,..

    je vais avoir des balises et données ajoutées ou supprimées (ça m'intéresse)

    parcontre, je voudrais ignorer les balises simplement inversées, pour ça je voudrait voir xslt est une solution de tri post comparaison,...

  7. #7
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    last shot avec le xsl:order:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="/"> <xsl:apply-templates select ="*"> </xsl:template> <xsl:template match="*">
      <xsl:copy>  
        <xsl:apply-templates select ="node()">  
          <xsl:sort select="*" order="ascending"/>
        </xsl:apply-templates>  
      </xsl:copy> 
    </xsl:template> 
    <xsl:template match="text()|@*"><xsl:copy/><xsl:template>
    sinon essaye avec descending...ça dépend de l ordre

    si ça marche pas, honnètement je sais pas

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    merci pour ta réponse,

    alors j'ai pris 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
    19
    20
    21
    22
    23
    24
    25
    <?xml version="1.0" encoding="ISO-8859-1"?>
     
    <xsl:stylesheet
    xmlns:xsl="http://www.w3.org/TR/WD-xsl"
    xmlns="http://www.w3.org/TR/REC-html40"
    result-ns="">
     
    <xsl:template match="/"> 
      <xsl:apply-templates select ="*"/> 
    </xsl:template> 
     
    <xsl:template match="*">
    <xsl:copy> 
    <xsl:apply-templates select ="node()"> 
    <xsl:sort select="*" order="ascending"/>
    </xsl:apply-templates> 
    </xsl:copy> 
    </xsl:template> 
     
    <xsl:template match="text()|@*">
    <xsl:copy/>
    </xsl:template>
     
     
    </xsl:stylesheet>
    et j'ai un autre fichier xml auquel j'applique le xsl ci-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <?xml-stylesheet href="test.xsl" type="text/xsl"?>
    <a>
    <c>1</c>
    <b>2</b>
    </a>
    et il me dit

    La page XML ne peut pas être affichée
    Impossible d'afficher l'entrée XML en utilisant la feuille de style XSL. Corrigez l'erreur, puis cliquez sur le bouton Actualiser ou réessayez ultérieurement.


    --------------------------------------------------------------------------------

    Le mot clé xsl:apply-templates ne peut pas contenir xsl:sort.
    je pensais pourtant que xsl:apply-templates pouvait contenir xsl:sort



    Helpppp

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

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns:xsl="http://www.w3.org/TR/WD-xsl"
    Ca, c'est forbidden... Ca correspond à une version totalement obsolète et incomplète de XSLT. Commence par corriger cela, c'est un préalable pour qu'on puisse t'aider.
    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

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    Yes, j'm'excuse,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:stylesheet version="1.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    ça marche, enfin il ne signale plus d'erreur
    maintenant, il m'affiche 12 à la place de 21
    et comment faire quand on utilise le parseur d'IE pour voir le code source du résultat ?


  11. #11
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    personnelement j utilise xmlspy, il y a une fonctionnalité de generation du code dedans.
    mais en utilisant le parseur "msxsl", tu peux specifier un chemin en batch aussi
    regarde chez microsoft la doc parce que moi je ne m en souviens plus (et puisil faut telecharger msxsl)

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 28
    Points : 7
    Points
    7
    Par défaut
    ça marche pas

    quelqu'un sait-il comment trier une structure xml et pas un contenu ???

  13. #13
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    essaye avec ç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
    <?xml version="1.0"?>
     
    <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 select ="*"/>
    </xsl:template>
     
    <xsl:template match="*">
        <xsl:copy>
          <xsl:apply-templates select="@*|*|text()">
            <xsl:sort select="name(current())"/>
          </xsl:apply-templates>
      </xsl:copy>
    </xsl:template>
     
    </xsl:stylesheet>
    Ce n’est pas en cassant le thermomètre que vous ferez baisser la température

Discussions similaires

  1. [XSLT] lire le contenu des balises en xml dans un ordre précis
    Par ajax12 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/04/2010, 18h47
  2. [XSLT] Mettre en rouge des balises xml
    Par akrogames dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 26/11/2009, 15h16
  3. [XSLT] Affichage des balises xml en html via une xslt
    Par Eileen dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 20/04/2007, 15h53
  4. Souhaite modifier l'ordre des balises
    Par loupin dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 21/07/2006, 21h16
  5. [XML] validation de fichier XML:l'ordre des balises compte ?
    Par longbeach dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 04/09/2005, 18h53

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