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 :

Tri sur des heures


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut Tri sur des heures
    Bonjour *

    je suis confronté à un petit problème que je mets entre vos mains.

    Je dispose d un fichier xml suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    <GeneratedReport>
        <Interval Start="2013/08/27 00:00:00.000" End="2013/08/27 14:18:59.000">
    <EngTm Mnemonic="mesure1" EngValue="-4.245283018867925"  Date="2013/08/27 05:59:52.384"/>
    <EngTm Mnemonic="mesure2" EngValue="-1.0377358490566042" Date="2013/08/27 05:59:47.264"/>
    <EngTm Mnemonic="mesure1" EngValue="-3.018867924528301"  Date="2013/08/27 11:59:52.384"/>
    <EngTm Mnemonic="mesure2" EngValue="-2.169811320754717"  Date="2013/08/27 11:59:47.264"/>
    </Interval>
    </GeneratedReport>
    Je souhaite effectuer un xsl qui permette de trier ce doc afin d obtenir
    les mesures mesures 1 et mesure2 acquises à la même heure ( même heure et même minute ) sachant que les mesures sont effectuées toutes les 4 heures et que malheureusement les mesures 1 et 2 ne peuvent pas bénéficier de l horodatage.


    ci dessous le format que je souhaite obtenir :

    2013/08/27 05:59:52 -4.24 -1.03
    2013/08/27 11:59:52 -3.01 -2.16

    pour info, je ne suis pas en mesure de modifier le fichier xml d ou la nécessité d'effectuer un post processing.


    peut on effectuer un tri par groupe @Date en précisant que je ne souhaite que les 17 premiers caractères constituant la date ?
    ( substring @date,1,17)

    Je vous remercie par avance

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    oui, en effet, ça se fait exactement comme pour regrouper des données qui ont un champ commun, sauf que là c'est le substring() d'un champ. Voir la FAQ sur comment regrouper les noeuds en fonction de leurs éléments qui se ressemblent.
    Oui, c'est assez lourdingue. En XSLT 2.0 c'est bien plus simple.

    Bien sûr, ton problème c'est que tu vas très vite avoir des données du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <EngTm Mnemonic="mesure1" EngValue="-4.245283018867925"  Date="2013/08/27 05:59:01.384"/>
    <EngTm Mnemonic="mesure2" EngValue="-1.0377358490566042" Date="2013/08/27 05:58:59.264"/>
    et tu ne vas pas les regrouper parce qu'elles n'étaient pas exactement dans la même minute, bien qu'elles soient au même moment (moins de 3 secondes d'écart, alors que ton exemple avait plus de 5 secondes d'écart.)

    Regrouper en fonction d'un moindre écart en secondes est nettement plus compliqué (et pas super bien défini mathématiquement.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    bonjour

    vous évoquez dans votre réponse une solution plus simple en xslt 2.0. Il s'avère que je dispose de cette version.

    Pourriez vous me dire de quelle solution il s'agit ?

    cordialement

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    RE

    Finalement, j'ai trouvé la solution je faisais l'erreur de mettre un @ devant

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par raphael75015 Voir le message
    Pourriez vous me dire de quelle solution il s'agit ?
    Je précise quand même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each-group select="EngTm" group-by="substring(@Date, 1, 17)">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2013
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 86
    Par défaut
    Re

    Je vous communique la solution que j ai choisi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:for-each-group select="//EngTm" group-by="substring(Date,0,17)">
    En fait si je mets le substring(@Date,0,17)", cela ne fonctionne pas .

    je ferai en sorte que les mesures interviennent dans la même heure et minute afin de ne pas avoir de surprise !!!

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par raphael75015 Voir le message
    REn fait si je mets le substring(@Date,0,17)", cela ne fonctionne pas .
    Ça fonctionne avec l'exemple que tu nous as montré et si le moteur XSLT n'a pas de bug.

    Citation Envoyé par raphael75015 Voir le message
    je ferai en sorte que les mesures interviennent dans la même heure et minute afin de ne pas avoir de surprise !!!
    Cela ne résout pas le problème :
    07:59:59 et 08:00:01
    2013/08/12 23:59:59 et 2013/08/13 00:00:01
    2013/08/31 23:59:59 et 2013/09/01 00:00:01
    2013/12/31 23:59:59 et 2014/01/01 00:00:01
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XSL] Calcul sur des heures
    Par pilz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/03/2006, 13h55
  2. calcul sur des heures
    Par pascale86 dans le forum Access
    Réponses: 5
    Dernier message: 22/12/2005, 16h22
  3. Opération sur des heures dans Excel
    Par mirascheat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/12/2005, 10h34
  4. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24
  5. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 09h27

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