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] parsage et regroupement


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut [XSLT] parsage et regroupement
    Bonjour à tous et désolé pour mon titre peu explicite

    J'aimerai votre aide car je débute avec xsl et j'ai beaucoup de mal à faire ce que je veux
    J'ai un fichier xml de cette forme :
    Code xml : 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
    <exist:result>
    	<projs>
    		<proj>
    			<id-pf>id1</id-pf>
    			<nom-pf>projet1</nom-pf>
                            <prog>Programme</prog>
     
     
    		</proj>
    		<proj>
    			<id-pf>id2</id-pf>
    			<nom-pf>projet2</nom-pf>
                            <prog>Programme</prog>
    		</proj>
    	</projs>
    </exist:result>
    et j'aimerai obtenir quelque chose comme ça :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <prog name="Programme">
    	<pf>id1</pf>
    	<pf>id2</pf>
    </prog>

    En sachant que dans le premier code le nom du programme est toujours le même et correspond à la valeur que je met dans l'attribut name

    Voici mon code actuel :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:template match="/">
    		<prog>
    			<xsl:attribute name="name">
    				<xsl:value-of select="distinct-values($instance/exist:result/projs/proj/prog)"/>
    			</xsl:attribute>
     
    			<xsl:for-each select="$instance/exist:result/projs/proj"/>
    			<pf>
    				<xsl:value-of select="id-pf"/>
    			</pf>
    		</prog>
    	</xsl:template>

    La première partie fonctionne (pour l'attribu name) mais la seconde non
    Merci d'avance pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    Bon je dois pas avoir les yeaux en face des trous ce matin !

    C'est juste mon for-each que je ferme tout de suite et donc qui ne servait à rien. Voici le bon code (si ça peut aidé quelqu'un)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:template match="/">
    		<prog>
    			<xsl:attribute name="name">
    				<xsl:value-of select="distinct-values($instance/exist:result/projs/proj/prog)"/>
    			</xsl:attribute>
     
    			<xsl:for-each select="$instance/exist:result/projs/proj">
    				<pf>
    					<xsl:value-of select="id-pf"/>
    				</pf>
    			</xsl:for-each>
    		</prog>
    	</xsl:template>

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    J'ai un nouveau problème
    J'ai un deuxième fichier qui a cette structure :
    Code xml : 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
    30
    31
    32
    33
    <projets>
        <projet>
            <pf-code>id1</pf-code>
            <tache-name/>
            <raf>3</raf>
        </projet>
        <projet>
            <pf-code>id1</pf-code>
            <tache-name>Codage</tache-name>
            <raf>9</raf>
        </projet>
     
        <projet>
            <pf-code>id1</pf-code>
            <tache-name>Codage</tache-name>
            <raf>3</raf>
        </projet>
        <projet>
            <pf-code>id1</pf-code>
            <tache-name>Test</tache-name>
            <raf>361.25</raf>
        </projet>
        <projet>
            <pf-code>id2</pf-code>
            <tache-name>Intégration</tache-name>
            <raf>22</raf>
        </projet>
        <projet>
            <pf-code>id3</pf-code>
            <tache-name>Intégration</tache-name>
            <raf>22</raf>
        </projet>
    </projets>



    Je cherche à obtenir la somme des raf pour chaque pf-code différent par tache-name ayant des pf-code = id-pf présent dans le premier fichier
    Ainsi en résultat, j'aurai ce genre de code :
    Code xml : 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
    <prog name="Programme">
    	<pf code="id1">
    		<tache name="Codage">
    			<raf>12</raf>
    		</tache>
    		<tache name="Test">
    			<raf>361.25</raf>
    		</tache>
     
    	</pf>
    	<pf code="id2">
    		<tache name="Intégration">
    			<raf>22</raf>
    		</tache>
    	</pf>
    </prog>

    et voici mon code actuel (qui ne fonctionne pas)
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <prog>
    	<xsl:attribute name="name">
    		<xsl:value-of select="distinct-values($instance/exist:result/projs/proj/prog)"/>
    	</xsl:attribute>
     
    	<xsl:for-each select="$instance/exist:result/projs/proj[id-pf = projets/projet/pf-code]">
    		<pf>
    			<xsl:attribute name="code">
    				<xsl:value-of select="projets/projet/pf-code"/>
    			</xsl:attribute>
                    </pf>			
    	</xsl:for-each>
    </prog>

    La première partie fonctionne (j'ai bien le nom du programme) mais les balises pf n'apparaissent pas

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Points : 1 610
    Points
    1 610
    Par défaut
    Hello,
    Regarde ce lien pour te construire des xsl:key de regroupement :
    http://www.jenitennison.com/xslt/grouping/index.html

Discussions similaires

  1. [XSLT] Filtre et regroupement selon balise
    Par littleLink dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 24/12/2010, 12h23
  2. [XSLT] Problème de regroupement
    Par einsteineuzzz dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 24/08/2010, 09h20
  3. [XSLT] Parsage XML via XSLT, comment être valide W3C ?
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/05/2010, 20h19
  4. [XSLT] substring et regroupement
    Par nadsky dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 05/06/2009, 16h31
  5. [XSLT]Problèmes pour regrouper selon l'attribut
    Par gharl dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 21/08/2006, 21h39

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