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 :

Regroupement de record (XSL ou XPATH?)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut Regroupement de record (XSL ou XPATH?)
    Bonjour à tous,

    Alors voici la problématique que j'ai :

    Je possède une structure XML de la forme :
    <StructureParente>
    <structure>
    <dateDebut></dateDebut>
    <dateFin><DateFin>
    <coeff></coeff>
    <id><id>
    </structure>
    ...
    <structure>
    <dateDebut></dateDebut>
    <dateFin><DateFin>
    <coeff></coeff>
    <id><id>
    </structure>
    </StructureParente>

    Ce record (structure) se répète X fois dans ma structure parente.

    Je souhaiterai dans un premier temps regrouper ces records en fonction de coeff et id (c'est à dire tous ceux qui ont le même coeff et le même id se retrouve ensemble)

    De sorte que, ensuite, je puisse n'obtenir qu'une structure ayant pour date de début le min(des date de début ayant les même id et coeff) et comme date de fin le max(des dates de fin ayant les même id et coeff).

    En gros, si j'ai en entrée:

    <StructureParente>
    <structure>
    <dateDebut>01012000</dateDebut>
    <dateFin>01122000<DateFin>
    <coeff>1</coeff>
    <id>toto<id>
    </structure>
    <structure>
    <dateDebut>01012001</dateDebut>
    <dateFin>01122001<DateFin>
    <coeff>1</coeff>
    <id>toto<id>
    </structure>
    </StructureParente>

    que je puisse avoir en sortie :
    <StructureParente>
    <structure>
    <dateDebut>01012000</dateDebut>
    <dateFin>01122001<DateFin>
    <coeff>1</coeff>
    <id>toto<id>
    </structure>
    </StructureParente>

    Que dois-je utiliser? XSL ou XPATH
    et est-ce possible de le faire? Si oui est-ce que quelqu'un aurait une piste.

    D'avance merci pour vos réponses

    Cordialement

    LaBastoss

  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 : 51
    Localisation : France, Gironde (Aquitaine)

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

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

    Je souhaiterai dans un premier temps regrouper ces records en fonction de coeff et id (c'est à dire tous ceux qui ont le même coeff et le même id se retrouve ensemble)
    tu peux utiliser l'élement xsl:key pour faire cela.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    XPath ne peut pas le faire tout seul, c'est donc un boulot pour XSLT*et XPath.

    Toutefois si tu n'as pas XSLT 2.0, il y a deux problèmes :

    - Le regroupement. En XSLT 1.0 ça se fait avec la méthode Muench. Ce n'est pas trop difficile, mais bon, il y a ça.
    - Prendre la date mini et maxi. En XSLT 1.0 il n'y a pas de fonction min() ni max(), déjà, mais en plus le format de date n'est pas pratique : il n'est pas dans l'ordre alphabétique ni numérique. Et XSLT 1.0 n'a pas de notion de date et ne peut donc pas s'adapter à ça sans trop de complications.
    C'est possible, mais compliqué. (Il suffit de comparer selon des sous-chaînes de la date, dans le bon ordre d'importance, et de faire effectuer le tri avec xsl:sort sur un for-each dont on ne garde que le premier/dernier élément.)

    Si tu as accès à XSLT 2.0, le regroupement se fait avec du for-each-group, et la définition du format de date et prendre le min/max se fait en regardant un peu la doc.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 24
    Points : 13
    Points
    13
    Par défaut
    Bonjour,

    merci pour vos réponses.

    Alors pour le moment j'ai tenté de le faire via un for-each-group dans lequel je groupe en fonction du coefficient, ensuite, sur ce groupe, j'applique un second for-each-group dans lequel je groupe en fonction de l'id. Mais, ensuite, le truc c'est que je ne vois pas comment arriver à spécifier la date; c'est à dire effectuer les comparatifs entre les différents noeuds avant d'appliquer une fonction min/max. Quand je spécifie directement min(startDate) et max(endDate), il me regroupe les noeuds indépendamment du tri en fonction des coefficient et de l'id.

    Si vous avez des pistes à explorer de ce coté.

    D'avance merci

    Cordialement

    LaBastoss

Discussions similaires

  1. [XSLT] Regrouper/Restructurer xml/xsl
    Par RlDuke dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 19/10/2009, 14h48
  2. Accéder aux bonnes informations d´un XML à l´aide de XSL et XPath.
    Par Courgette17 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 08/08/2009, 21h47
  3. system.xml.Xsl et xpath?
    Par samir dans le forum C#
    Réponses: 1
    Dernier message: 29/03/2007, 18h38
  4. [XSLT] Regroupement en utilsant xsl:key
    Par AVRAVR dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/07/2006, 11h02
  5. Cours en Français sur XML-XSL et XPath
    Par Community Management dans le forum XSL/XSLT/XPATH
    Réponses: 0
    Dernier message: 25/04/2002, 16h46

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