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 :

Transformation xml ligne en csv colonne. [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut Transformation xml ligne en csv colonne.
    Bonjour,
    Pour faire simple j'ai un fichier xml avec la forme ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <row name="France">
     <field name="Capitale" value="Paris"/>
     <field name="Population" value="65000000"/>
     <field name="Money" value="euros"/>
    </row>
    Je voudrais écrire un fichier csv de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Langue;Capitale;Money;Population
    ;Paris;euros;65000000

    En fait je ne sais pas si le xslt est adapté !
    Parce que comme vous l'aurez vous :
    1 - les colonnes ne sont pas dans le bon ordre (Population avant Money dans le xml et Money avant Population dans le csv)
    2 - Il peut y avoir des colonnes manquantes dans le xml (Langue dans l'exemple)

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par VITALTH Voir le message
    En fait je ne sais pas si le xslt est adapté !
    Ça ira tant que tu restes dans le simple.

    Citation Envoyé par VITALTH Voir le message
    1 - les colonnes ne sont pas dans le bon ordre (Population avant Money dans le xml et Money avant Population dans le csv)
    2 - Il peut y avoir des colonnes manquantes dans le xml (Langue dans l'exemple)
    Pas grave, du moment que tu connais les colonnes.
    - Elles seront dans l'ordre où tu les appelleras,
    - une colonne manquante doit juste être vide, et c'est exactement ce que fait XSLT en cas de donnée inexistante.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    3456
    <row name="France">
    <field name="Capitale" value="Paris"/>
    <field name="Population" value="65000000"/>
    <field name="Money" value="euros"/>
    </row> Je voudrais écrire un fichier csv de la forme :


    Code :Sélectionner tout - Visualiser dans une fenêtre à part123
    Langue;Capitale;Money;Population
    ;Paris;euros;65000000

    Bon j'ai essayé de faire qqch dans ce sens :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
    >
        <xsl:output method="text" indent="yes"/>
    	<xsl:template match="/row">
    		<xsl:variable name ="Langue">
    			<xsl:if test="./field[@name='Langue']" >
    				<xsl:value-of select="./field[@value]"></xsl:value-of>
    			</xsl:if>
    		</xsl:variable>
    		<xsl:variable name ="Capitale">
    			<xsl:if test="./field[@name=Capitale]" >
    				<xsl:value-of select="./field[@value]"></xsl:value-of>
    			</xsl:if>
    		</xsl:variable>
    		<xsl:variable name ="Money">
    			<xsl:if test="./field[@name=Money]" >
    				<xsl:value-of select="./field[@value]"></xsl:value-of>
    			</xsl:if>
    		</xsl:variable>
    		<xsl:variable name ="Population">
    			<xsl:if test="./field[@name='Population']" >
    				<xsl:value-of select="./field[@value]"></xsl:value-of>
    			</xsl:if>
    		</xsl:variable>
    		<xsl:value-of select ="$Langue"></xsl:value-of>;<xsl:value-of select ="$Capitale"></xsl:value-of>;<xsl:value-of select ="$Money"></xsl:value-of>>;<xsl:value-of select ="$Population"></xsl:value-of>
    	</xsl:template>
    </xsl:stylesheet>
    Ya peut être plus optimale mais de tout façon en sortie j'ai
    Les valeurs n'apparaissent pas.

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut C bon ça marche
    Bon encore une fois il y a peut être plus propre mais j'ai :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
    >
        <xsl:output method="text" indent="yes"/>
    	<xsl:template match="/row">
    		<xsl:variable name ="Langue">
    			<xsl:value-of select="./field[@name='Langue']/@value"></xsl:value-of>
    		</xsl:variable>
    		<xsl:variable name ="Capitale">
                                          <xsl:value-of select="./field[@name='Capitale']/@value"></xsl:value-of>
    		</xsl:variable>
    		<xsl:variable name ="Money">
    			<xsl:value-of select="./field[@name='Money']/@value"></xsl:value-of>
    		</xsl:variable>
    		<xsl:variable name ="Population">
    			<xsl:value-of select="./field[@name='Population']/@value"></xsl:value-of>
    		</xsl:variable>
    		<xsl:value-of select ="$Langue"></xsl:value-of>;<xsl:value-of select ="$Capitale"></xsl:value-of>;<xsl:value-of select ="$Money"></xsl:value-of>>;<xsl:value-of select ="$Population"></xsl:value-of>
    	</xsl:template>
    </xsl:stylesheet>

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    - Pas besoin de variables,
    - pas besoin de if,
    - les value-of devraient être auto-fermants, en une seule balise : <xsl:value-of select=" ... "/> ,
    - pour sélectionner un attribut c'est field/@value et non pas field[@value]
    - ce serait plus simple de mettre les ; entre xsl:text : <xsl:text>;</xsl:text> et d'aller à la ligne à chaque fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:value-of select="truc[@bidule = 'chouette']/@machin"/>
    <xsl:text>;<xsl:text>
    <xsl:value-of select="truc[@bidule = 'chose']/@machin"/>
    <xsl:text>;<xsl:text>
    <!-- et ainsi de suite -->
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2008
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2008
    Messages : 464
    Points : 268
    Points
    268
    Par défaut
    Merci encore
    Ok pour le <xsl:text>

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

Discussions similaires

  1. Erreur d'analyse xml, ligne 1 colonne 1
    Par kara.ci dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/10/2008, 15h19
  2. Transformer des lignes en colonnes
    Par ofinot dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 30/07/2008, 11h45
  3. Transformer les lignes en colonnes
    Par metalcoyote dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 23/02/2007, 09h45
  4. [Excel] Sauvegarder n lignes et n colonnes en CSV
    Par kurkaine dans le forum Excel
    Réponses: 3
    Dernier message: 25/11/2006, 10h59
  5. TRANSFORM et PIVOT? Transformer les lignes en colonnes
    Par capitaine dans le forum Access
    Réponses: 1
    Dernier message: 12/07/2006, 11h53

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