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] Ordonner un fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [XSLT] Ordonner un fichier xml
    Voila j'ai une petite interface en php qui me permet de rajouter des urls à un fichier sitemap, mais je voudrais que les url de mon fichier xml final soient triées par ordre de priorité.

    J'utilise DOM de php 5 pour editer mon fichier xml.
    Pour trier mon fichier je pense que je dois utilisé xsl,xslt.


    Voici le code php pour appliquer le xslt à mon fichier xml.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    $moteurXslt = new XSLTProcessor();
    $style = new DOMDocument();
    $style->load('tri.xsl');
    $moteurXslt->importStylesheet($style);
    $source = new DOMDocument();
    $source->load('sitemap.xml');
     
    echo $moteurXslt->transformToUri($source, 'resultat.xml');
     
    ?>

    En faite je pense que c'est le xslt qui me pose probleme.
    Y à t il une autre manière pour effectuer un tri sur un fichier xml ??

    Voila pourriez vous me donner une piste pour la solution la plus adapté.

    Merci.

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Utiliser l'API DOM pour trier un document XML ne me paraît pas du tout évident à faire alors qu'avec XSLT, il suffit de parcourir les éléments avec un <xsl:sort>

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    J'ai vu que xslt avais une fonction pour trier les élement par ordre croissant mais voila mon fichier xml final après tri ne possède plus aucune balise
    Faut il que je redéfinisse un template pour tout le reste ??

  4. #4
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Il faut se baser sur la transformation dite "identité" qui préserve tous les noeuds et attributs

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Et du coté de xpath avec dom ?? Ya il une possibilité de faire une recherche sur les éléments ?

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    XPath permet de récupérer tous les noeuds vérifiant une expression mais dans le désordre : il faudrait les trier par un moyen intermédiaire quelconque (table,...) puis reconstruire le XML... Le tri par XSLT me paraît plus sain et plus simple...

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Alors voila j'ai enfin réussi a faire mon tri.

    Voila mon code XML :
    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
     
    <?xml version="1.0"?>
    <urlset>
      <url>
        <loc>http://www.liens1.fr</loc>
        <changefreq>weekly</changefreq>
        <priority>0.7</priority>
      </url>
      <url>
        <loc>http://www.liens2.fr</loc>
        <changefreq>weekly</changefreq>
        <priority>0.9</priority>
      </url>
      <url>
        <loc>http://www.liens3.fr</loc>
        <changefreq>weekly</changefreq>
        <priority>0.8</priority>
      </url>
      <url>
        <loc>http://www.liens4.fr</loc>
        <changefreq>weekly</changefreq>
        <priority>0.2</priority>
      </url>
    </urlset>

    Mon code XSL :
    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="iso-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
        <xsl:output method="xml" indent="yes" encoding="utf-8"/>
     
        <!-- Copie de tous les noeuds et attributs -->
        <xsl:template match="@* | node()">
            <xsl:copy>
                <xsl:apply-templates select="@* | node()"/>
            </xsl:copy>
        </xsl:template>
     
        <!-- chaque url sera recréé avec tous ces noeuds enfants et attributs -->
        <xsl:template match="url">
            <url>
                <xsl:apply-templates/>
            </url>
        </xsl:template>
     
        <!-- On recréé le xml en triant les urls par la valeur de leur enfant priority -->
        <xsl:template match="/urlset">
            <urlset>
                <xsl:apply-templates select="url">
                    <xsl:sort select="priority" order="descending" data-type="number"/>
                </xsl:apply-templates>
            </urlset>
        </xsl:template>
     
    </xsl:stylesheet>
    et Mon code PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
     
    $moteurXslt = new XSLTProcessor();
    $style = new DOMDocument();
    $style->load('tri.xsl');
    $moteurXslt->importStylesheet($style);
    $source = new DOMDocument();
    $source->load('sitemap.xml');
     
    print $moteurXslt->transformToUri($source, 'resultat.xml');
     
    ?>
    Voila donc si peu aider quelqu'un d'autre j'ai repris le code xsl sur le forum

    Par contre lorsque je rajoute un espace de nom de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
    à ma balise urlset le tri ne fonctionne pas comment faire pour prendre en compte les attributs?

  8. #8
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Avez-vous rajouté le namespace par défaut dans la source XML ET dans la feuille de transformation ?

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Je ne pense pas l'avoir fais mais je suis pas très a l'aise avec les espaces de noms

Discussions similaires

  1. [XSLT] Appliquer un traitement xslt sur un fichier XML distant
    Par mabig dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/03/2006, 09h38
  2. [XSLT] Création de fichier XML dynamique avec PHP
    Par daninho dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 02/02/2006, 11h18
  3. [xslt] Parser 2 fichiers XML
    Par malekms dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/12/2005, 12h22
  4. [XSLT] Diviser un fichiers xml en plusieurs pages html
    Par thibaut06 dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/04/2005, 16h56
  5. [XSLT] Fusion de fichier XML ???
    Par webtheque dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 04/03/2005, 20h13

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