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 :

[SimpleXML] Convertir DOM en simplexml


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut [SimpleXML] Convertir DOM en simplexml
    Bonsoir tous le monde, j'ai une petite question en fait j'ai parcourus le tutorial sur la class php 5 pour faire un sitemap.
    Je trouve ce script pas mal, mais j'ai un petit souçis avec la transformation de l'affichage.
    Il s'affiche parfaitement en xml et j'ai voulus convertir dans un autre fichier pour afficher le sitemap en html.
    Donc garder l'affichage xml et ajouter un autre en html.
    J'ai voulus convertir les Nodes DOM en simplexml afin d'afficher cela aisément, je m'y suis pris comme une truffe faut dire lol.
    PS: j'ai garder le tutorial tel quel afin de tester avant de mettre mon propre contenu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    require 'test_sitemap.php';
    $dom = new domDocument;
    $dom->loadXML($sitemap);
    $s = simplexml_import_dom($dom);
    echo $s->urlset[5]->url->loc->lastmod->changefreq->priority;
    Ceci est dans une page que j'ai nommer test_sitemap.php

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Je ne comprends pas pourquoi vous passez de DOM à SimpleXML : vous pouvez directement lire votre fichier XML avec l'extension SimpleXML, il y a le constructeur pour ça ou bien la fonction simplexml_load_file.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $sxml = simplexml_load_file($sitemap);
    foreach ($sxml->url as $u) {
        printf("URL : %s<br/>", $u->loc);
        printf("Dernière modification : %s<br/>", $u->lastmod);
        printf("Fréquence : %s<br/>", $u->changefreq);
        printf("Dernière modification : %s<br/>", $u->priority);
    }
    L'objet SimpleXML correspond à la racine (donc à l'élément urlset).

    Note : la classe Sitemap (celle dont vous donnez le lien) hérite de DomDocument donc vous pouvez l'utiliser directement aussi.

    En espérant avoir compris le problème

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    ok, il me semblais bien que j'étais a coté de la plaque.
    Je testerai ce soir et vous ferai part du résultat en vous remerciant d'avance

  4. #4
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila j'ai tester votre code et 2 erreurs surviennent :
    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity "" in C:\wamp\www\coiffure_elvira\sitemap.html.php on line 3

    Warning: Invalid argument supplied for foreach() in C:\wamp\www\coiffure_elvira\sitemap.html.php on line 4

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Flûte, méthode loadXML donc chargement d'un document XML à partir d'une chaîne au lieu d'un fichier donc il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_load_string($sitemap);
    Et non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_load_file($sitemap);

  6. #6
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    je n'ai rien a part :
    Erreur d'analyse XML : données incompréhensibles après l'élément de document
    Emplacement : http://localhost/coiffure_elvira/sitemap.html.php
    Numéro de ligne 3, Colonne 1 :<br />
    ^
    J'ai jeter un oeil a la source afin d'avoir plus de détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="utf-8"?>
    <urlset xmlns="http://www.google.com/schemas/sitemap/0.84"><url><loc>http://g-rossolini.developpez.com/</loc><lastmod>2007-08-16</lastmod><changefreq>monthly</changefreq><priority>0.8</priority></url><url><loc>http://g-rossolini.developpez.com/tutoriels/php/zend-framework/debuter/</loc><lastmod>2007-06-05</lastmod><changefreq>yearly</changefreq></url><url><loc>http://g-rossolini.developpez.com/tutoriels/php/les-formulaires-et-php5/</loc><lastmod>2006-11-11</lastmod><changefreq>yearly</changefreq></url><url><loc>http://g-rossolini.developpez.com/comparatifs/php/templates/</loc><lastmod>2007-03-19</lastmod><changefreq>yearly</changefreq></url></urlset>
    <br />
    <b>Warning</b>:  simplexml_load_string() expects parameter 1 to be string, object given in <b>C:\wamp\www\coiffure_elvira\sitemap.html.php</b> on line <b>3</b><br />
    <br />
    <b>Warning</b>:  Invalid argument supplied for foreach() in <b>C:\wamp\www\coiffure_elvira\sitemap.html.php</b> on line <b>4</b><br />
    Pourtant si j'affiche le fichier d'exemple le xml est parfait

  7. #7
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    A quoi correspond $sitemap, visiblement ce n'est pas une chaîne de caractères comme vous le laissiez croire ? Je suspecte un objet Sitemap ou DomDocument, auquel cas il faudra bien effectuer un import, c'est à dire remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_load_string($sitemap);
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sxml = simplexml_import_dom($sitemap);

  8. #8
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Voila plus d'erreur, j'ai mis ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $sxml = simplexml_import_dom($sitemap);
    foreach ($sxml->url as $u) {
        $aff_sitemap = printf("URL : %s<br />", $u->loc);
        $aff_sitemap .= printf("Dernière modification : %s<br />", $u->lastmod);
        $aff_sitemap .= printf("Fréquence : %s<br />", $u->changefreq);
        $aff_sitemap .= printf("Dernière modification : %s<br />", $u->priority);
    }
    return $aff_sitemap;
    Si vous voyez quelque chose pour amélioré je suis prenneur
    merci

  9. #9
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Oui dans l'utilisation de printf Cette fonction retourne un entier qui correspond au nombre de caractères imprimés : vous devriez plutôt utiliser sprintf qui fonctionne sur le même principe ou faire directement des concaténations :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $aff_sitemap = '';
    foreach ($sxml->url as $u) {
        $aff_sitemap .= sprintf("URL : %s<br />", $u->loc);
        $aff_sitemap .= sprintf("Dernière modification : %s<br />", $u->lastmod);
        $aff_sitemap .= sprintf("Fréquence : %s<br />", $u->changefreq);
        $aff_sitemap .= sprintf("Priorité : %s<br />", $u->priority);
        # Voir en une ligne
        $aff_sitemap .= sprintf("URL : %s<br />\nDernière modification : %s<br />\nFréquence : %s<br />\nPriorité : %s<br />\n", $u->loc, $u->lastmod, $u->changefreq, $u->priority);
    }
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $aff_sitemap = '';
    foreach ($sxml->url as $u) {
        $aff_sitemap .= 'URL : ' . $u->loc . '<br />Dernière modification : ' . $u->lastmod . '<br />Fréquence : ' . $u->changefreq . '<br />Priorité : ' . $u->priority . '<br />';
    }
    A votre convenance

  10. #10
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    grand merci on peux dire que j'ai l'embarras du choix

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

Discussions similaires

  1. [DOM][SimpleXML] Performances ?
    Par tiplof dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 19/03/2013, 15h57
  2. [SimpleXML] copie de noeud simpleXML dans d'autres simpleXML
    Par herotic dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 17/12/2010, 13h11
  3. [XML] SimpleXml, XMLReader, Dom ou DomXML ?
    Par Zikas-r dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 27/02/2009, 16h51
  4. [SimpleXML] group by avec simplexml
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 04/05/2007, 10h37
  5. [SimpleXML] Expression Xpath Et Simplexml
    Par ANISSS dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 14/04/2007, 21h07

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