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] Traitement d'un fichier XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut [XSLT] Traitement d'un fichier XML
    bonjour,

    je suis devant un exo XSLT et j'aurai besoin d'une aide pour une question svp.

    voila 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    <laboratoire nom="irit">
    <projets>
    	<projet pid="p1">
    		<chefprojet>c2</chefprojet>
    		<participant>c5</participant>
    		<participant>c6</participant>
    		<participant>c7</participant>
    		<participant>c1</participant>
    	</projet>
    	<projet pid="p2">
    		<chefprojet>c1</chefprojet>
    		<participant>c2</participant>
    		<participant>c3</participant>
    		<participant>c7</participant>
    		<participant>c4</participant>
    	</projet>
    </projets>	
     
    <chercheurs>
    	<chercheur cid="c1">
    		<nom>durand</nom>
    		<prenom>jean</prenom>
    		<grade type="mcf"/>
    		<sexe type="m"/>
    	</chercheur>
    	<chercheur cid="c2">
    		<nom>martin</nom>
    		<prenom>miryam</prenom>
    		<sexe type="f"/>
    		<grade type="pr"/>
    	</chercheur>
     
            ......................
     
    	<chercheur cid="c8">
    		<nom>melchior</nom>
    		<prenom>jean</prenom>
    		<grade type="mcf"/>
    		<sexe type="m"/>
    	</chercheur>
    </chercheurs>
    </laboratoire>
    voila le résultat auquel je souhaite aboutir

    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
     
    <chercheurs>
    	<chercheur>
    		<nom>durand</nom>
    		<grade>mcf</grade>
    		<projet>p2</projet>
    	</chercheur>
    	<chercheuse>
    		<nom>martin</nom>
    		<grade>pr</grade>
                    <projet>p1</projet>
    	</chercheuse>
     
            ...............
     
    	<chercheur>
    		<nom>melchior</nom>
    		<grade>mcf</grade>
    		<projet></projet>
    	</chercheur>
    </chercheurs>

    et voila le code XSLT que j'ai fais

    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
     
    <xsl:template match="laboratoire">
    	<chercheurs>
    		<xsl:apply-templates select="chercheurs/chercheur" />
    	</chercheurs>
    </xsl:template>
     
    <xsl:template match="chercheur">
    	<xsl:choose>
    		<xsl:when test="./sexe/@type='m'">
    			<chercheur>
    				<nom><xsl:value-of select="./nom" /></nom>
    				<grade><xsl:value-of select="./grade/@type" /></grade>
    		>>>???>>>	<projet><xsl:value-of select="//projet/*[.='@cid']/../@pid" /></projet>
    			</chercheur>
    		</xsl:when>
    		<xsl:when test="./sexe/@type='f'">
    			<chercheuse>
    				<nom><xsl:value-of select="./nom" /></nom>
    				<grade><xsl:value-of select="./grade/@type" /></grade>
                   >>>???>>>        <projet><xsl:value-of select="//projet/*[.='@cid']/../@pid" /></projet>
    			</chercheuse>
    		</xsl:when>
    	</xsl:choose>
    </xsl:template>
    voila, le problème est que je n'arrive pas à récupérer l'identifiant du projet auquel est affecté le chercheur ; c'est donc la balise Projet que je n'arrive pas à remplir.

    je vous remercie du fond du coeur.

  2. #2
    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
    Je suis une tanche en XSLT, mais :

    - Ça me semble pas trop dans l'esprit du traitement sémantique d'information, de changer de nom de balise en fonction du sexe uniquement de quelqu'un. Un attribut ou un élément fils serait plus adapté.

    - A priori, un chercheur peut faire partie de plusieurs projets. Il se passe quoi, alors ?

    - Dans ton expression XPath, tu devrais virer les quotes autour de '@cid'. Tel que, tu cherches les projets avec un participant dont l'id est littéralement @cid. Arobe puis cid.

  3. #3
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    merci d'avoir pris le temps de me répondre ... c'est sympa.

    pour le structure du fichier résultat, c'est juste une exercice, le but est de maitriser les différents aspects de XSLT, donc même si ça n'a aucun sens je suis obligé d'aboutir à ce résultat. je tien à dire que c'est pas moi qui l'ai fais cet exercice.

    dans le cas où un chercheur appartient à plusieurs projets, on peut supposer que le la balise projet contient tous les projets, ça c'est pas un problème.

    pour les cotes, j'ai testé mais ce n'est pas ça. apparemment il me faut concaténer comme ceci pour obtenir le résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <projet><xsl:apply-templates select=concat('//projet[./*="',@cid,'"]') /></projet>
    mais le complilateur de cooktop ne l'accepte pas !!!!!

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    En aménageant ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xsl:template match="chercheur">
    	<xsl:variable name="id"><xsl:value-of select="@cid"/></xsl:variable>
    		<xsl:choose>
    			<xsl:when test="./sexe/@type='m'">
    				<chercheur>
    					<nom><xsl:value-of select="./nom" /></nom>
    					<grade><xsl:value-of select="./grade/@type" /></grade>
    					<projet><xsl:for-each select="//projet[chefprojet = $id]/@pid | //projet[participant = $id]/@pid"><xsl:value-of select="."/></xsl:for-each></projet>
    				</chercheur>
    			</xsl:when>
    ...
    ça devrait répondre à ton problème.

  5. #5
    Membre du Club
    Inscrit en
    Avril 2007
    Messages
    157
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 157
    Points : 67
    Points
    67
    Par défaut
    c'est magnifique, je ne savais même pas qu'on pouvais utiliser des variables en XSLT.

    merci vieux, c'est une excellente solution

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

Discussions similaires

  1. [XSLT] Appel d'un fichier XML dans du Traitement XSLT
    Par katoyi dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/04/2008, 19h46
  2. [XSLT] Comment lier un fichier XML et XSLT
    Par bitou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/08/2006, 16h35
  3. Java et XML : Traitement d'un fichier XML avec JAVA
    Par nice dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 18/05/2006, 22h24
  4. XSLT traiter recursivement un fichier xml
    Par davelo dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/02/2006, 11h52
  5. [C#] [XML] Traitement de gros fichiers XML (90 Mo)
    Par Pulsahr dans le forum Windows Forms
    Réponses: 20
    Dernier message: 01/12/2005, 15h40

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