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 :

CSV tree to XML


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut CSV tree to XML
    Bonjour,

    J'ai un fichier csv en entree sous cette forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EURUSD|20101212|1.30|1.30
    EURGBP|20101212|0.81|0.81
    EURJPY|20101212|113.45|113.45
    Je le convert en un fichier temporaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <spot>
       <line>EURUSD|20101212|1.30|1.30</line>
       <line>EURGBP|20101212|0.81|0.81</line>
       <line>EURJPY|20101212|113.45|113.45</line>
    </spot>

    Et je souhaite le transformer en XML avec XSL sous la forme
    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
     
    <spot>
        <date value="20101212">
            <pair key="EURUSD">
                <bid>1.30</bid>
                <ask>1.30</ask>
            </pair>
            <pair key="EURGP">
                <bid>0.81</bid>
                <ask>0.81</ask>
            </pair>
            <pair key="EURJPY">
                <bid>113.45</bid>
                <ask>113.45</ask>
            </pair>
        </date>
    </spot>
    Seulement je ne sais pas comment recuperer la date pour la mettre a la racine et creer les noeuds en parcourant l'entree.

    Si vous avez des idees merci de me dire comment faire.

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    pour récuppérer un élément line, tu peux utiliser une règle de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:template match="spot/line">
      <xsl:value-of select="."/>
    </xsl:template>
    ... en fait, tu as tout ce qu'il te faut ici :
    -- parcourir ton fichier XML
    -- créer un élément;
    -- créer un attribut;
    -- récupérer une sous-chaîne de caractères
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    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
    Un truc que je me demande, c'est pourquoi pas générer directement la forme finale à partir du CSV, au lieu de passer par une forme temporaire ?

    Ça a l'air plus facile en XSLT ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    +1 sur Thelvin, le plus simple serait de générer directement le fichier XML désiré.

    Mais bon c'est pas super complexe à faire en XSL non plus, il suffit d'utiliser les fonctions substring-before et/ou substring-after avec le caractère de séparation (|) : http://www.w3schools.com/xpath/xpath...ons.asp#string.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2006
    Messages
    534
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 534
    Points : 562
    Points
    562
    Par défaut
    Bonjour,

    On recupere des donnees sous ce format (csv) on doit utiliser XSL pour la transformation

    En plus le contenu du CSV change en focntion des donnees recues et on doit generer des xml differents

    Par exemple
    1) spot
    En entree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    EURUSD|20101212|1.30|1.30
    EURGBP|20101212|0.81|0.81
    EURJPY|20101212|113.45|113.45
    XML genere
    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
     
    <spot>
        <date value="20101212">
            <pair key="EURUSD">
                <bid>1.30</bid>
                <ask>1.30</ask>
            </pair>
            <pair key="EURGP">
                <bid>0.81</bid>
                <ask>0.81</ask>
            </pair>
            <pair key="EURJPY">
                <bid>113.45</bid>
                <ask>113.45</ask>
            </pair>
        </date>
    </spot>
    2) equities
    En entree
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ABI BB Equity|20101212|40.43|40.44|40.465|40.786|3098539|
    EDF FP Equity|20101212|31.765|31.780|32.050|N.A.|N.A.|
    XML generere
    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
     
    <prices>
        <date value="20101212">
            <market value="BE EURONXT">
                <equity value="ABI.BE">
                    <bid>15.30</bid>
                    <ask>15.30</ask>
                    <clo></clo>
                    <lst>15.36</lst>
                </equity>
                <equity value="EDF.FP">
                    <bid>35.30</bid>
                    <ask>35.30</ask>
                    <clo></clo>
                    <lst>36.36</lst>
                </equity>
            </market >
        </date>
    </prices>

    Bien sur ce n'est pas complexe mais je souhaite regrouper tous les elements qui ont la meme date dans sous-arbre

    par exemple pour les spots: au lieu d'avoir ceci

    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
     
    <spot>
        <date value="20101212">
            <pair key="EURUSD">
                <bid>1.30</bid>
                <ask>1.30</ask>
            </pair>
        </date>
        <date value="20101212">
            <pair key="EURGP">
                <bid>0.81</bid>
                <ask>0.81</ask>
            </pair>
        </date>
        <date value="20101212">
            <pair key="EURJPY">
                <bid>113.45</bid>
                <ask>113.45</ask>
            </pair>
        </date>
    </spot>
    Ceci est mieux
    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
     
    <spot>
        <date value="20101212">
            <pair key="EURUSD">
                <bid>1.30</bid>
                <ask>1.30</ask>
            </pair>
            <pair key="EURGP">
                <bid>0.81</bid>
                <ask>0.81</ask>
            </pair>
            <pair key="EURJPY">
                <bid>113.45</bid>
                <ask>113.45</ask>
            </pair>
        </date>
    </spot>

  6. #6
    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 ttttnht Voir le message
    On recupere des donnees sous ce format (csv) on doit utiliser XSL pour la transformation
    Ajouter des <ligne> ... </ligne> et une racine <spot>, c'est déjà une transformation, et ce n'est pas en XSLT que vous la faites, puisque c'est impossible. Alors pourquoi s'arrêter en si bon chemin et ne pas faire toute la transformation sans XSLT ? Ça ferait une étape de moins.

    Maintenant, si vous persistez dans l'idée d'utiliser XSLT (très probablement une mauvaise idée au vu de la description du problème,) ce regroupement par date peut se faire à l'aide d'une méthode Muench.

    Ici, le match porterait sur toutes les <ligne>, et le use serait sur une partie du contenu : la date. Cela peut en effet être extrait avec substring-after() et substring-before().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [CodeTyphon] Enregistrer un TStringGrid en fichier CSV ou bien XML
    Par LerikalBless dans le forum Autres IDE
    Réponses: 13
    Dernier message: 18/05/2015, 15h19
  2. [Débutant] Modifier CSV pour export XML
    Par Docteur26 dans le forum VB.NET
    Réponses: 2
    Dernier message: 24/01/2013, 09h17
  3. [XML][CSV]Transformer du XML en CSV et inversement !
    Par tgarcia dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/11/2006, 16h10
  4. Tree View avec XML et XSL
    Par Drooxy dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/04/2003, 10h21
  5. pb formatage document XML généré par un dom tree
    Par lionel69 dans le forum APIs
    Réponses: 11
    Dernier message: 17/10/2002, 09h53

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