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]Passer du XML au CSV avec XSL


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut [XSLT]Passer du XML au CSV avec XSL
    Bonjour à tous,

    J'ai un fichier XML que je voudrais passer en CSV pour pouvoir importer les données sous Excel 2000 qui ne fait pas le XML (le rascal).

    J'ai donc fait un XSL qui transforme le fichier en CSV. J'ai un petit souci d'arborescence, je m'explique :

    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Erreurs>
    	<Erreur id="20">
    	<Libelle>Erreur 1</Libelle>
    		<LibelleEcran>LIB</LibelleEcran>
    		<Contextes>
    		<Contexte id="0" msg="12" p2="0" p3="9" ecran="4">
    			<Desc>Par defaut</Desc>
    		</Contexte>
    		<Contexte id="1" msg="12" p2="0" p3="9" ecran="2">
    			<Desc>Deuxieme cas</Desc>
    		</Contexte>
    		</Contextes>
    	</Erreur>
    Mon fichier xsl se présente comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0"?>
    <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text"/>
    <xsl:template match="/" >
    <xsl:for-each select="Erreurs"><xsl:for-each select="Erreur"><xsl:value-of select="@id"/>,<xsl:value-of select="Libelle"/>,<xsl:for-each select="Contextes"><xsl:for-each select="Contexte"><xsl:value-of select="@id"/>,<xsl:value-of select="@msg"/>,<xsl:value-of select="@p2"/>,<xsl:value-of select="@p3"/>,<xsl:value-of select="@ecran"/>,<xsl:value-of select="Desc"/>;
    </xsl:for-each>
    </xsl:for-each>
    </xsl:for-each>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    Il doit surement y avoir du code plus propre mais je dois dire que je ne suis pas du tout un expert XSL.

    Le résultat donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    20,Erreur1,0,12,0,9,4,Par defaut;
    1,12,0,9,2,Deuxieme cas;
    or je voudrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    20,Erreur1,0,12,0,9,4,Par defaut;
    20,Erreur1,1,12,0,9,2,Deuxieme cas;
    Quelqu'un voit-il comment faire ? J'imagine que c'est très simple.

    Merci d'avance !

    Bonne journée

  2. #2
    Membre éprouvé
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Points : 1 063
    Points
    1 063
    Par défaut
    voila un code qui fonctionne
    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="text"/>
     
    <xsl:template match="/" >
    	<xsl:apply-templates select="//Contexte"/>
    </xsl:template>
     
    <xsl:template match="Contexte" >
    	<xsl:value-of select="parent::Contextes/parent::Erreur/@id"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="parent::Contextes/parent::Erreur/Libelle"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="@id"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="@msg"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="@p2"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="@p3"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="@ecran"/><xsl:text>,</xsl:text>
    	<xsl:value-of select="./Desc"/><xsl:text>;
    </xsl:text>
    </xsl:template>
     
     
    </xsl:stylesheet>

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2005
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 16
    Points : 15
    Points
    15
    Par défaut
    C'est absolument parfait ! Et le code ressemble à autre chose

    Merci beaucoup Fraoustin.

    Bonne fin de journée et bon weekend.

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

Discussions similaires

  1. [XSLT 1.0] Passer du XML au CSV avec XSL
    Par BertrandB dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/01/2015, 23h18
  2. newbie : XML >> CSV avec XSL
    Par cli16 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 16/07/2009, 17h20
  3. [XSLT]comment recuperer variable dans url avec xsl
    Par jeha dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 29/10/2007, 11h34
  4. [XSLT] Conversion universelle xml en csv
    Par titi31 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 06/09/2007, 09h29
  5. Réponses: 7
    Dernier message: 04/06/2007, 15h51

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