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] tri par date avec xsl:sort


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut [XSLT] tri par date avec xsl:sort
    Bonjour voici le xsl en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:apply-templates select="FICHE">
    	<xsl:sort select="@*[name() = $sortby]" order="{$order}" data-type="text" />
    </xsl:apply-templates>
    et le XML
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <DATA>
    	<FICHE nom="toto" date="22/03/2008" description="blabla" />
    	<FICHE nom="tata" date="20/10/2010" description="blibli" />
    	<FICHE nom="tutu" date="12/01/2010" description="blublu" />
    </DATA>
    Mon xsl, tri mes fiches en fonction de l'attribut ($sortby) qui peut être "nom", "date" ou "description". Ça fonctionne très bien sauf pour les dates, comment puis-je faire pour que le tri se fasse correctement ?

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    tu peux associer à chaque élément FICHE un poids créer à partir de la DATE :

    DATE="22/03/2008" --> poids="20080322",

    puis tu effectue un tri numérique des poids.
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Oh merci, c'est pas con, il faut que je vois comment appliquer ça à mon cas mais c'est une bonne piste.
    Juste pour précision tu me propose bien de gérer un flux de ce type avec un attribut poids en plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FICHE nom="tutu" date="12/01/2010" description="blublu" poids="20100112"/>
    ou tu entends autre chose par "associer" ?

  4. #4
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FICHE nom="tutu" date="12/01/2010" description="blublu" poids="20100112"/>
    C'est effectivement une forme d'"association".
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  5. #5
    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
    personnellement je n'aime pas modifier les ficheirs xml , surtout avec ce type de donnée.

    Pour changer un format sur une date voir
    Comment changer le format d'une date ?

    Et vous ne voyez peut être toujours pas ou cela vous mène ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:sort select="concat(substring(@date, 7, 4substring(@date, 4, 2),substring(@date, 1, 2))" order="{$order}" data-type="text" />
    pour l'apply je conseille un xsl:choose avec un apply avec ce sort si le tri='date' et l'autre autrement.
    Il y a peut être une autre méthode mais il faut que je teste et je n'ai pas le temps en ce moment

  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
    J'ai enfin eu le temps de vérifier voici un code générique(ou presque)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:apply-templates select="FICHE">
       <xsl:sort select="concat(substring(@date[$sortby='date'], 7, 4),substring(@date[$sortby ='date'], 4, 2),substring(@date[ $sortby ='date'], 1, 2))  " order="ascending" data-type="text" />
       <xsl:sort select="(@*[name() = $sortby])[ $sortby !='date']" order="ascending" data-type="text"/>
    </xsl:apply-templates>
    Pour rendre parfaitement générique ce code, il suffirait de passer un deuxième paramètre indiquant le type de la donnée (texte ou date) que j'ai appelé ici typeTri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:apply-templates select="FICHE">
    	<xsl:sort select="concat(substring((@*[name() = $sortby])[$typeTri='date'], 7, 4),substring((@*[name() = $sortby])[$typeTri ='date'], 4, 2),substring((@*[name() = $sortby])[ $typeTri ='date'], 1, 2))  " order="ascending" data-type="text"/>
    	<xsl:sort select="(@*[name() = $sortby])[ $typeTri !='date']" order="ascending" data-type="text"/>
    </xsl:apply-templates>
    Cela faisait longtemps que je ne m'étais pas replongé dans ces problèmes de tri générique, vu que j'ai appris quelques trucs entre temps, cela a été instructif pour moi, j'espère que cela le sera pour vous aussi

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

Discussions similaires

  1. probleme de tri avec xsl:sort
    Par d4v1d dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2007, 15h35
  2. ouvire formulaire avec un tri par date
    Par flo456 dans le forum IHM
    Réponses: 2
    Dernier message: 01/02/2007, 15h55
  3. [MySQL] Tri par date avec timestamp
    Par shutdown76 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/01/2007, 02h37
  4. [XSLT] Tri de date par mois : comment faire ?
    Par sdkddk dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 04/08/2006, 21h37
  5. [ XML ][ XSL ] tri par date
    Par zozolh2 dans le forum XMLRAD
    Réponses: 6
    Dernier message: 26/08/2004, 10h19

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