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] : agrégation de lignes


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut [XSL] : agrégation de lignes
    Salut,
    Je me pose la question suivante : il y a t-il un moyen d'agréger des lignes via XSL

    Exemple :
    Voici mon fichier xml
    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
     
    <start>
     <data>
      <b1>Entete</b1>
      <b2>Ex1</b2>
     </data>
     <data>
      <b1>Entete</b1>
      <b2>Ex2</b2>
     </data>
     <data>
      <b1>Entete2</b1>
      <b2>Ex3</b2>
     </data>
     <data>
      <b1>Entete2</b1>
      <b2>Ex4</b2>
     </data>
    </start>
    Et voilà ce que je voudrais obtenir avec mon xsl :
    Un bô tableau qui ressemblerait à ç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
     **************
     * Entete           *
     **************
     * Ex1               *
     **************
     * Ex2               *
     **************
     
     **************
     * Entete2          *
     **************
     * Ex3               *
     **************
     * Ex4               *
     **************
    Je mets en commun la donnée Entete et Entete2

    Une solution est de revoir la structure du fichier xml mais c'est un peu trop radical...
    @+

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 305
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 305
    Points : 15 633
    Points
    15 633
    Par défaut
    avec Xpath tu peut récupérer tout les "data" qui ont la même entête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="/start/data[b1='Entete']"

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    je ne suis pas censé connaître la valeur de <b1> ...
    Je cherche à faire un espèce de 'GROUP BY' sur ce b1

  4. #4
    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
    Ca doit etre un truc dans ce gout la mais c'est juste l'idee(non-teste)

    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:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
     
    <xsl:key name="b" match="b1" use="."/> 
     
    <xsl:template match="/"> 
     
        <xsl:for-each select="//b1[generate-id(.)=generate-id(key('b', .)[1])]"> 
          <xsl:value-of select=".">
          <xsl:apply-template select="//b2[parent::*/b1=.]"/>
     
     
    </xsl:for-each> 
     
    </xsl:template> 
    <xsl:template match="b2"> 
    <xsl:value-of select=".">
    </xsl:template>    
    </xsl:stylesheet>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 41
    Points : 35
    Points
    35
    Par défaut
    Moi je verrais ça plutôt.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <xsl:apply-templates select="/start/data[not(b1=preceding-sibling::data/b1)]" mode="truc"/>
     
    <xsl:template match="data" mode="truc">
    <xsl:variable name="ent" select="b1">
    <xsl:element name="entete">
    <xsl:for-each select="/start/data[b1=$ent]>
    <xsl:attribute name="ex" select="b2"/>
    </xsl:for-each>
    </xsl:element>
    </xsltemplate>
    Copy

  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
    Citation Envoyé par hatake.kakashi
    /start/data[not(b1=preceding-sibling::data/b1)]
    en effet cet xpath marche mais il est a evite absolument quand tu peux faire autrement(en gros on l'utilise sur des fichiers dont on est sur qu'ils seront tjrs tres petit ou dans un selectnodes du dom),car c'est une metode tres couteuse,par exemple sur un fichier de 22000 enregistrement avec une autre methode ca prendra entre 15-30s suivant la complexite de l'action,celui ci compte 5-10 minutes

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos indications, je vais tester tout ça

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

Discussions similaires

  1. [XSLT 1.0] XSL connaitre la ligne et la colonne en cours
    Par djibril dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/03/2013, 08h55
  2. [Vxi3] Agrégation de lignes
    Par BoCcool dans le forum Webi
    Réponses: 1
    Dernier message: 18/09/2012, 14h58
  3. [HTML][XSL] Retour à la ligne supprimer, que faire ?
    Par otsgd dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 08/09/2006, 11h41
  4. [XSL] sauts de lignes
    Par sozie9372 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/06/2006, 14h21
  5. [XSL-FO] retour à la ligne après un tableau ?
    Par Mrlud dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 25/04/2005, 17h15

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