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

Bibliothèques et frameworks PHP Discussion :

[XSL] Trier un fichier xml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut [XSL] Trier un fichier xml
    Bonjour à tous,
    je ne suis pas sur d'avoir choisi le bon forum, mais je pose tout de même la question ici...

    Alors voilà, je cherche un moyen de transformer un fichier XML en un autre fichier XML via XSL.
    Le probleme est que je n'arrive pas à regrouper certaines balises, donc soit le fichier XML suivant composé d'element "element" representant soit un 'folder' soit un 'file' de structure équivalente à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <filesystem>
       <element name = "b" fullpath="..." parent = "..." type="folder"/>
       <element name = "a" fullpath="..." parent = "..." type="folder"/>
       <element name = "d" fullpath="..." parent = "..." type="file"/>
       <element name = "c" fullpath="..." parent = "..." type="file"/>
    Je voudrais regrouper les 'folder' au début, puis les 'files' ensuite et par ordre croissant, pour obtenir quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <filesystem>
       <folder name = "a"/>
       <folder name = "c"/>
       <file name = "a"/>
        <file name = "b"/>
    </filesystem>
    J'ai essayé avec un XSL suivant :
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" omit-xml-declaration="no"/>
    	<xsl:template match="/">
    		<xsl:element name="filesystem">
    			<xsl:apply-templates select="element[@type='folder']"><xsl:sort select="@name"/></xsl:apply-templates>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="element[@type='folder']">
    		<xsl:element name="folder">
    			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
    				<xsl:attribute name="parent"><xsl:value-of select="@parent"/></xsl:attribute>
    				<xsl:attribute name="fullpath"><xsl:value-of select="@fullpath"/></xsl:attribute>
    		</xsl:element>
    	</xsl:template>
     
    	<xsl:template match="element[@type='file']">
    		<xsl:element name="file">
    			<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
    			<xsl:attribute name="parent"><xsl:value-of select="@parent"/></xsl:attribute>
    			<xsl:attribute name="fullpath"><xsl:value-of select="@fullpath"/></xsl:attribute>
    		</xsl:element>
    	</xsl:template>
    </xsl:stylesheet>
    Le probleme est le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates select="element[@type='folder']">
    qui ne veut pas me selectionner les noeuds "element" avec attribut type='folder'.
    Le résultat avec ce XSL est :
    Si j'enleve le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="element[@type='folder']
    de apply-templates, alors le résultat est "similaire" à ce que je veux, mais pas trié, et je ne peux pas controler l'ordre d'apparition des "folder" et des "files" (je veux les folders en premier).

    Quelqun'un à une idée ?

    Merci !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 20
    Points : 8
    Points
    8
    Par défaut
    Re-bonjour,
    finalement j'ai trouvé la réponse à mon probleme, donc pour ceux qui auraient eu un probleme similaire, c'était le chemin XPATH qui était erroné dans mon <xsl:apply-templates>. Il fallait mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:apply-templates select="filesystem/element[@type='folder']"><xsl:sort select="@name"/></xsl:apply-templates>
    donc mettre "filesystem/element" et pas uniquement "element". Etrange sachant que lorsque je suis dans le math="/", je suis bien dans l'arborescence "fylesystem" (element root).

    Bref, ca fonctionne tres bien comme ca !

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/10/2008, 17h46
  2. [XSLT]un fichier xsl et plusieurs fichiers xml
    Par akhtira dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 04/02/2008, 11h03
  3. [DOM] [XSL] Convertir un fichier XML vers un fichier CSS
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 23/03/2007, 10h49
  4. [XSL] Afficher un fichier xml dans un fichier php
    Par Sylvain245 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/12/2006, 12h21
  5. [XSL][C++]encodage fichier xml
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2006, 09h45

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