Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/09/2007, 01h22   #1
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
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 :
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2007, 10h31   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2007, 12h56   #3
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 20h25   #4
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Voila j'ai tester votre code et 2 erreurs surviennent :
Citation:
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 21h53   #5
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
$sxml = simplexml_load_string($sitemap);
Et non :
Code :
$sxml = simplexml_load_file($sitemap);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2007, 22h45   #6
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
je n'ai rien a part :
Citation:
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 :
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 13h26   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
$sxml = simplexml_load_string($sitemap);
Par :
Code :
$sxml = simplexml_import_dom($sitemap);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 14h01   #8
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
Voila plus d'erreur, j'ai mis ceci :
Code :
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
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 14h19   #9
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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 :
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
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 14h34   #10
Membre éprouvé
 
Avatar de gtraxx
 
Homme Aurélien Gérits
Développeur Web
Inscription : mai 2006
Messages : 1 045
Détails du profil
Informations personnelles :
Nom : Homme Aurélien Gérits
Âge : 30
Localisation : Belgique

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

Informations forums :
Inscription : mai 2006
Messages : 1 045
Points : 498
Points : 498
grand merci on peux dire que j'ai l'embarras du choix
__________________
Au petit déjeuner, je prend du PHP et au souper du jQuery.
AFUP 2009 : Bien optimiser son code pour le référencement
Mon projet open source de librairie PHP 5: magix cjquery
gtraxx est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h02.


 
 
 
 
Partenaires

Hébergement Web