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 :

XML plat vers un XML hiérarchisé


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut XML plat vers un XML hiérarchisé
    Bonjour,

    j'ai un fichier xml plat avec une structure comme celle-ci :

    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
     
    <data>
    <nom>dupont</nom>
    <prenom>martin</prenom>
    <age>25</age>
    <e-mail>blabla@yahoo.bla</e-mail>
    <article>chaussure</article>
    <article>table</article>
    <article>livres</article>
    <article>ordinateur</article>
    <nom>john</nom>
    <prenom>john</prenom>
    <age>10</age>
    <e-mail>blabla@gmail.bla</e-mail>
    <article>vélo</article>
    <article>chaussure</article>
    <nom>peter</nom>
    <prenom>pete</prenom>
    <age>55</age>
    <e-mail>blabla@hotmail.bla</e-mail>
    <article>verre</article>
    </data>
    et je voudrais lui appliquer une feuille xsl pour lui ajouter des balises englobantes pour lui donner un peu hierarchie, pour obtenir quelque chose du genre:

    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
     
    <data>
      <personne>
        <nom>dupont</nom>
        <prenom>martin</prenom>
        <age>25</age>
        <e-mail>blabla@yahoo.bla</e-mail>
        <article>chaussure</article>
        <article>table</article>
        <article>livres</article>
        <article>ordinateur</article>
      </personne>
      <personne>
        <nom>john</nom>
        <prenom>john</prenom>
        <age>10</age>
        <e-mail>blabla@gmail.bla</e-mail>
        <article>vélo</article>
        <article>chaussure</article>
      </personne>
      <personne>
        <nom>peter</nom>
        <prenom>pete</prenom>
        <age>55</age>
        <e-mail>blabla@hotmail.bla</e-mail>
        <article>verre</article>
      </personne>
    </data>
    je dois traiter des xml au format xml d'openoffice, et ces xml sont désespérément plats. Merci.

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    il existe plusieurs méthodes, voici la plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="nom">
      <xsl:variable name="position-dernier" select="count(following-sibling::*[not(self::nom)]) - count(following-sibling::nom/following-sibling::*[not(self::nom)])"/>
      <personne>
        <xsl:copy-of select="."/>
        <xsl:copy-of select="following-sibling::*[position() &lt;= $position-dernier]"/>
      </personne>
    </xsl:template>
    Pour les fichiers Writer d'OpenOffice le principe est le même, le code est juste un peu plus compliqué à cause de la gestion des niveaux de titre.

  3. #3
    Membre habitué Avatar de VinnieMc
    Inscrit en
    Décembre 2005
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 208
    Points : 161
    Points
    161
    Par défaut
    Bonjour GrandFather,

    merci infiniment ça marche. Merci.

    Voici la feuille xsl pour ceux que ça intéresserait:

    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" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
     
    <xsl:template match="/">
    	<xsl:apply-templates></xsl:apply-templates>
    </xsl:template>
     
    <xsl:template match="nom">
      <xsl:variable name="position-dernier" select="count(following-sibling::*[not(self::nom)]) - count(following-sibling::nom/following-sibling::*[not(self::nom)])"/>
      <personne>
        <xsl:copy-of select="."/>
        <xsl:copy-of select="following-sibling::*[position() &lt;= $position-dernier]"/>
      </personne>
    </xsl:template>
     
    <xsl:template match="prenom"/>
    <xsl:template match="age"/>
    <xsl:template match="e-mail"/>
    <xsl:template match="article"/>
     
    </xsl:stylesheet>

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/06/2012, 16h00
  2. [XML] fichier plat vers xml
    Par jasminrose dans le forum APIs
    Réponses: 22
    Dernier message: 16/04/2007, 17h37
  3. Réponses: 2
    Dernier message: 06/07/2006, 08h47
  4. [XSLT] xml plat à xml arborescent
    Par enigma dans le forum XSL/XSLT/XPATH
    Réponses: 24
    Dernier message: 24/06/2005, 22h43
  5. XML/XSL vers HTML: comment transformer les linefeed en <B
    Par AlainM dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 18/11/2003, 12h30

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