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] xml ancien schéma vers xml nouveau schéma


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Points : 151
    Points
    151
    Par défaut [XSLT] xml ancien schéma vers xml nouveau schéma
    Bonjour ,

    Je souhaite transformer un fichier xml que j'ai exporté d'une base de données en un autre fichier xml et j'ai entendu dire que le xslt permet de faire çà bien.
    Seulement je ne connais pas le xslt(je suis train de regarder comment ça fonctionne).
    Le but est de faire cette transformation de façon générique qui s'appliquerait à tous mes autres exports de quelques dizaine à plusieurs dizaine de milliers de lignes, juste en donnant le nom du fichier.xml.
    C'est possible çà ?


    Voici mon exemple de fichier auteurs.xml en direct me ma base :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
     
     
    <pma_xml_export version="1.0">
        <!--
        - Base de données: 'biblio'
        -->
        <database name="biblio">
            <!-- Table auteurs -->
            <table name="auteurs">
                <column name="Auteurs_Id">11</column>
                <column name="Auteurs_Nom">élémang</column>
                <column name="Auteurs_Prenom">çagri mpo</column>
            </table>
            <table name="auteurs">
                <column name="Auteurs_Id">12</column>
                <column name="Auteurs_Nom">demul </column>
                <column name="Auteurs_Prenom">Ferà çamalse</column>
            </table>
            <table name="auteurs">
                <column name="Auteurs_Id">13</column>
                <column name="Auteurs_Nom">l'obs et ohla"  </column>
                <column name="Auteurs_Prenom">Koffigoh</column>
            </table>
            <table name="auteurs">
                <column name="Auteurs_Id">14</column>
                <column name="Auteurs_Nom">Quartz</column>
                <column name="Auteurs_Prenom">Poilzoin</column>
            </table>
        </database>
    </pma_xml_export>


    Après transformation je souhaiterais obtenir le fichier auteurs-old-schema.xml comme suit:

    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
     
    <?xml version="1.0" encoding="utf-8"?>
     
     <biblio>
    <auteurs>
      <Auteurs_Id>11</Auteurs_Id>
      <Auteurs_Nom>élémang</Auteurs_Nom>
      <Auteurs_Prenom>çagri mpo</Auteurs_Prenom>
    </auteurs>
     
    <auteurs>
      <Auteurs_Id>12</Auteurs_Id>
      <Auteurs_Nom>demul</Auteurs_Nom>
      <Auteurs_Prenom>Ferà çamalse </Auteurs_Prenom>
    </auteurs>
     
    <auteurs>
      <Auteurs_Id>13</Auteurs_Id>
      <Auteurs_Nom>Allàf</Auteurs_Nom>
      <Auteurs_Prenom>l'obs et "ohla" </Auteurs_Prenom>
    </auteurs>
    <auteurs>
      <Auteurs_Id>14</Auteurs_Id>
      <Auteurs_Nom>Quartz</Auteurs_Nom>
      <Auteurs_Prenom>Poilzoin</Auteurs_Prenom>
    </auteurs>
     </biblio>
    Pouvez vous m'aider, membres éclairés dans ce domaine ?

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Oui, XSLT est très, très adapté pour faire ça. (En fait je dirais même qu'il n'est adapté que pour ce genre de transformations.)
    Une remarque toutefois : un fichier XML ne peut voir qu'une seule balise racine. Je remarque que dans ton fichier source, la racine est <pma_xml_export> et elle contient un élément <database name="biblio">, alors que dans ton fichier transformé la racine est <biblio>. Si ta source contenait plusieurs éléments <database>, ça ferait plusieurs éléments racines et c'est impossible.

    C'est parti sur Google : xslt tutoriel.

    Je donne un début qui permet de reconnaître l'élément <database> et de le transformer en élément du nom de "name".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="database">
      <xsl:element name="{@name}">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
     
    </xsl:stylesheet>
    Chaque fois qu'on tombe sur un <database>, mettre à la place un élément dont le nom est l'attribut "name" du <database>. Puis, appliquer récursivement les templates au contenu du <database>.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je donne un début qui permet de reconnaître l'élément <database> et de le transformer en élément du nom de "name".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="database">
      <xsl:element name="{@name}">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
     
    </xsl:stylesheet>

    Chaque fois qu'on tombe sur un <database>, mettre à la place un élément dont le nom est l'attribut "name" du <database>. Puis, appliquer récursivement les templates au contenu du <database>.
    Merci thelvin ,
    En reprenant ton exemple je suis arrivé a çà.
    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
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="database">
      <xsl:element name="{@name}">
          <xsl:for-each select="table">
    	  <xsl:element name="{@name}">
    	      <xsl:for-each select="column">
                    <xsl:element name="{@name}">
    		<xsl:apply-templates/>
    		</xsl:element>
     
    	    </xsl:for-each>
       </xsl:element>
         </xsl:for-each>
     
      </xsl:element>
     
    </xsl:template>
     
    </xsl:stylesheet>
    Ce qui me donne ceci en transformation mais sur une ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <?xml version="1.0"?>
    <biblio><auteurs><Auteurs_Id>11</Auteurs_Id><Auteurs_Nom>élémang</Auteurs_Nom><Auteurs_Prenom>çagri mpo</Auteurs_Prenom></auteurs><auteurs><Auteurs_Id>12</Auteurs_Id><Auteurs_Nom>demul </Auteurs_Nom><Auteurs_Prenom>Ferà çamalse</Auteurs_Prenom></auteurs><auteurs><Auteurs_Id>13</Auteurs_Id><Auteurs_Nom>l'obs et "ohla" </Auteurs_Nom><Auteurs_Prenom>Koffigoh</Auteurs_Prenom></auteurs><auteurs><Auteurs_Id>14</Auteurs_Id><Auteurs_Nom>Quartz</Auteurs_Nom><Auteurs_Prenom>Poilzoin</Auteurs_Prenom></auteurs></biblio>
    C'est un peu çà non ?
    Comment puis je faire pour avoir le bon formatage ?
    Amélioration à apporter ?

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Ça marche aussi, mais c'est pas très souple, et, comme tu as vu, ça casse la mise en forme.

    Citation Envoyé par kossistus Voir le message
    Comment puis je faire pour avoir le bon formatage ?
    Tu fais pas des for-each, mais un template par élément.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 151
    Points : 151
    Points
    151
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Tu fais pas des for-each, mais un template par élément.
    OK Chef
    Et çà donne ça :
    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:template match="database">
      <xsl:element name="{@name}">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
     
     <xsl:template match="table">
      <xsl:element name="{@name}">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
     
     <xsl:template match="column">
      <xsl:element name="{@name}">
        <xsl:apply-templates/>
      </xsl:element>
    </xsl:template>
     
    </xsl:stylesheet>
    Et je crois que çà 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
    25
     
    <?xml version="1.0"?>
    <biblio>
     
            <auteurs>
                <Auteurs_Id>11</Auteurs_Id>
                <Auteurs_Nom>élémang</Auteurs_Nom>
                <Auteurs_Prenom>çagri mpo</Auteurs_Prenom>
            </auteurs>
            <auteurs>
                <Auteurs_Id>12</Auteurs_Id>
                <Auteurs_Nom>demul </Auteurs_Nom>
                <Auteurs_Prenom>Ferà çamalse</Auteurs_Prenom>
            </auteurs>
            <auteurs>
                <Auteurs_Id>13</Auteurs_Id>
                <Auteurs_Nom>l'obs et "ohla" </Auteurs_Nom>
                <Auteurs_Prenom>Koffigoh</Auteurs_Prenom>
            </auteurs>
            <auteurs>
                <Auteurs_Id>14</Auteurs_Id>
                <Auteurs_Nom>Quartz</Auteurs_Nom>
                <Auteurs_Prenom>Poilzoin</Auteurs_Prenom>
            </auteurs>
        </biblio>
    En fait c'est assez simple

    Merci de m'avoir aidé

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 25/05/2014, 19h44
  2. Migration de données vers un nouveau schéma
    Par Arnich dans le forum Débuter
    Réponses: 11
    Dernier message: 14/08/2008, 10h12
  3. [XML] fichier plat vers xml
    Par jasminrose dans le forum APIs
    Réponses: 22
    Dernier message: 16/04/2007, 17h37
  4. [XSLT] transfo d'un fichier XML en plusieurs fichiers XML
    Par doudou_rennes dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2006, 12h01
  5. Réponses: 2
    Dernier message: 06/07/2006, 08h47

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