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 :

Regrouper


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut Regrouper
    Salut j'ai ce fichier xml et je veux regrouper par category donc le resultat final est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <catalog>
    	<book category="computer">
    		<auteur>Mr y</auteur>
            <date>02021985</date>
        </book>	
        <book category="science">
    		<auteur>Victor</auteur>
            <date>02021985</date>
        </book>	
        <book category="computer">
    		<auteur>Mr X</auteur>
            <date>02021985</date>
        </book>	
    </catalog>
    sois avec xslt 2 ou bien le 1 merci pour votre aide

  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,

    en XSLT 2.0, alors.
    Il suffit d'exploiter le <xsl:for-each-group>, je te laisse te renseigner auprès de ta documentation préférée.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    j'ai utilisé <xsl:for-each-group> mais le resultat


    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
    <catalog>
     <book category="computer">
    	<book category="computer">
    		<auteur>Mr y</auteur>
                    <date>02021985</date>
            </book>	
           <book category="computer">
    		<auteur>Mr X</auteur>
            <date>02021985</date>
        </book>
    </book>
        <book category="science">
    		<auteur>Victor</auteur>
            <date>02021985</date>
        </book>	
        <book category="computer">
    		<auteur>Mr X</auteur>
            <date>02021985</date>
        </book>	
    </catalog>
    donc il répet 2 fois la balise

  4. #4
    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
    Du coup tu l'utilises mal, n'est-ce pas ?

    En réalité il faut montrer les codes XML et XSLT de départ. Le résultat obtenu à la fin, bon, c'est pas plus mal, mais c'est beaucoup moins utile.
    C'est toujours comme ça quand on cherche des réponses en informatique.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    j'ai utilise aussi xsl ça marche pas voici mon fichier xsl

    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
    26
    27
    28
    29
    <?xml version="1.0"?>
    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output omit-xml-declaration="yes" indent="yes"/>
     
     
         <xsl:output method="xml" indent="yes" />
     
        <xsl:key name="category" match="catalog/*" use="@category" />
     
        <xsl:template match="catalog">
            <catalog catalog-id="photo-catalog">
    		 <xsl:apply-templates select="header[1]"  />
    		  <xsl:if test=". != ''">
                <xsl:apply-templates select="*[generate-id(.)=generate-id(key('category',@category)[1])]"/>
    		  </xsl:if>
            </catalog>
        </xsl:template>
     
        <xsl:template match="book">
            <book category="{@category}">
    		 <xsl:if test=". != ''">
                  <xsl:copy-of select="key('category', @category)" />
    		 </xsl:if>
            </book>
        </xsl:template>
     
     
    </xsl:stylesheet>

  6. #6
    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
    .... Je ne vois pas de <xsl:for-each-group> -_-°.
    Et je me rappelle t'avoir aussi demandé le fichier XML.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    voici le 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
    <catalog>
    	<book category="computer">
    		<auteur>Mr y</auteur>
            <date>02021985</date>
        </book>	
        <book category="science">
    		<auteur>Victor</auteur>
            <date>02021985</date>
        </book>	
        <book category="computer">
    		<auteur>Mr X</auteur>
            <date>02021985</date>
        </book>	
    </catalog>

  8. #8
    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
    Ok, c'est plus clair. Mais le XSLT que tu as montré ne contient toujours pas de <xsl:for-each-group>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    j'utilise pas xslt2 donc c 'est pourquoi y'a pas le foreach

  10. #10
    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
    Euh... Oui, alors en fait, il faudrait donner toutes les informations, y compris celle-ci, dès le début, bien avant qu'on te les demande.

    Et donc, du coup, j'ai pas compris quel résultat tu veux obtenir :
    - dans ton premier message le XML n'a aucun regroupement, donc on peut pas voir ce que tu veux
    - dans ton exemple dupliqué, on voit ce que tu ne veux pas, mais on ne voit pas ce que tu veux.

    En tout cas c'est normal qu'il y ait duplication : d'une part tu fais un copy-of de tous les <book> et d'autre part tu fais ça entouré d'un <book>. Forcément ça va donner le même nombre de <book> qu'il y en avait au départ, plus un pour les encadrer.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 15
    Par défaut
    si vouz avez une idée stp aide moi pour avoir cet résultat merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <catalog>
    	<book category="computer">
    		<auteur>Mr y</auteur>
                    <date>02021985</date>
                    <auteur>Mr X</auteur>
                    <date>02021985</date>
        </book>	
        <book category="science">
    		<auteur>Victor</auteur>
            <date>02021985</date>
        </book>	
     
    </catalog>

  12. #12
    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
    Il est pas génial ce format voulu -_-°. Mais bon, si c'est vraiment ce que tu veux...

    Tu as la bonne technique, mais tu t'emmêles les pinceaux en faisant des trucs compliqués.

    Déjà, je pense que la recherche de catégories uniques, ne devrait pas se faire dans un apply-templates... Parce que tu cherches à traiter une catégorie, mais ce que tu sélectionnes est un livre. Donc ça ne va pas bien dans les templates.
    Je conseillerais plutôt un for-each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="*[generate-id(.)=generate-id(key('category',@category)[1])]">
      <book category="{@category}">
        <xsl:apply-templates select="key('category', @category)"/>
      </book>
    </xsl:for-each>
    et ensuite, le template sur <book> ne doit pas recopier la balise <book>, puisqu'on l'a déjà écrite pour chapeauter la catégorie, donc on doit juste recopier ses enfants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="book">
      <xsl:copy-of select="*"/>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Regroupement d'enregistrements en ASP/SQL Server
    Par Matlight dans le forum ASP
    Réponses: 3
    Dernier message: 02/04/2004, 13h31
  2. Comment regrouper les 3requêtes SQL?
    Par SkyDev dans le forum Langage SQL
    Réponses: 16
    Dernier message: 06/03/2004, 13h02
  3. Regroupement par mois
    Par fplanglois dans le forum SQL
    Réponses: 7
    Dernier message: 29/07/2003, 16h32
  4. Regrouper 3 requêtes dans une seule
    Par LadyArwen dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/06/2003, 09h32
  5. regrouper deux tables
    Par Shabata dans le forum Langage SQL
    Réponses: 4
    Dernier message: 19/05/2003, 15h02

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