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 : Regrouper des élément des éléments successif et concaténer les valeurs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 45
    Points : 34
    Points
    34
    Par défaut XSLT : Regrouper des élément des éléments successif et concaténer les valeurs
    Bonjour à tous.

    Je possède un fichier .xml qui ressemble à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <_FILE_LIVRE>
     <NEWITEM>
        <TYPE_DOC>1</TYPE_DOC>
        <ID_AUTEUR>A</ID_AUTEUR>
        <ID_AUTEUR>0002787</ID_AUTEUR>
        <ID_AUTEUR>0002788</ID_AUTEUR>
     </NEWITEM>
    </_FILE_LIVRE>
    Je souhaiterai faire une feuille de style qui me permettrait de regrouper toutes les valeurs des éléments <ID_AUTEUR> dans un seul et même élément <ID_AUTEUR>. Pour être plus clair, après transformation, mon fichier devrait ressembler à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <_FILE_LIVRE>
     <NEWITEM>
        <TYPE_DOC>1</TYPE_DOC>
        <ID_AUTEUR>A#0002787#0002788</ID_AUTEUR>
     </NEWITEM>
    </_FILE_LIVRE>
    J'aurai alors un champs <ID_AUTEUR> multivalué dont les différentes valeurs seraient séparées par un caractère "#".

    Je souhaiterai savoir si quelqu'un à une piste pour me lancer.
    En fouillant un peu sur le forum, je suis tombé sur la méthode muench. Est-ce la solution?

    Merci

  2. #2
    Membre actif Avatar de amadoulamine1
    Inscrit en
    Avril 2005
    Messages
    260
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 260
    Points : 270
    Points
    270
    Par défaut
    essai avec ca
    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
     
    <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
       <xsl:output method="html" media-type="text/html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
    <xsl:template match="//NEWITEM">
    <xsl:element  name = "NEWITEM">
    	<xsl:element  name = "ID_AUTEUR">
    	    <xsl:for-each select="ID_AUTEUR">
       	   	   <xsl:value-of select="text()" />
       	   	   <xsl:if test = "count(//ID_AUTEUR)!=position()">
       	   	   	<xsl:text>#</xsl:text>
       	   	   </xsl:if>
            </xsl:for-each>
    	</xsl:element>
    </xsl:element>
    </xsl:template>
    <xsl:template match="_FILE_LIVRE">
    	<xsl:element  name = "_FILE_LIVRE">
    		<xsl:element  name = "TYPE_DOC">
    			<xsl:value-of select="//TYPE_DOC" />
    		</xsl:element>
    	<xsl:apply-templates select = "NEWITEM" />
    </xsl:element>
    </xsl:template>
    </xsl:stylesheet>
    Ne testez jamais une erreur que vous ne savez pas gérer.
    de ne pas oublier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 45
    Points : 34
    Points
    34
    Par défaut
    Merci de ta réponse.

    Je pense qu'elle va m'être d'une grande aide.
    L'idée étant d'arriver à généraliser le bout de code que tu m'a donné pour qu'il soit adaptable à différents type de document.
    Par exemple il doit pouvoir marcher avec le document xml suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <_FILE_LIVRE>
        <TYPE_DOC>1</TYPE_DOC>
        <ID_AUTEUR>1</ID_AUTEUR>
         <ID_AUTEUR>2</ID_AUTEUR>
    </_FILE_LIVRE>
    Mais aussi avec le document xml suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <_FILE_AUDIO>
        <TYPE_AUDIO>1</TYPE_AUDIO>
        <ID_COMPOSITEUR>1</ID_COMPOSITEUR>
         <ID_COMPOSITEUR>2</ID_COMPOSITEUR>
    </_FILE_AUDIO>
    Je vais donc partir de ton code pour le rendre générique.
    Merci

Discussions similaires

  1. [XSLT] Regroupement sur base d'éléments de même valeur
    Par clang35 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 03/12/2008, 14h43
  2. Réponses: 19
    Dernier message: 20/12/2006, 10h15
  3. [MySQL] Utilisation des fonctions des récupérations des données
    Par Konrad Florczak dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/10/2006, 15h17
  4. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21
  5. des ' et des " dans un champs, et je doit les recups
    Par gretch dans le forum Langage
    Réponses: 3
    Dernier message: 05/05/2006, 10h01

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