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 11/10/2007, 19h34   #1
Invité régulier
 
Inscription : juin 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 87
Points : 8
Points : 8
Envoyer un message via MSN à mathieu3392
Par défaut [SimpleXML] Parser un XML avec SimpleXML_Load_File

Bonsoir,
je suis en train de créer la nouvelle version du site d'une radio nationale et j'aurai besoin d'avoir votre avis sur les méthodes de parse xml sachant que je reçois un flux XML pour chaque fournisseur de contenu partenaire de la radio.
Je cherche donc une méthode de parse qui fonctionne avec la plupart des flux xml; pouvez-vous m'aider ?

Enfin, je me suis penché sur le simplexml_load_file mais je n'arrive pas à lire ce flux :

Code XML :
1
2
3
4
<?xml version="1.0" encoding="UTF-8"?>
<reponse guichet="" pointvente="">
<salle codsal="">
<nom_salle></nom_salle><ville></ville><pays>FR</pays><manif codman=""><nom_manif></nom_manif><genre></genre><sous-famille /><url></url><image></image><date_debut>20/11/2007</date_debut><date_fin>20/11/2007</date_fin><prix_min>1370</prix_min><prix_max>1370</prix_max><dispo>1</dispo><commentaire-long></commentaire-long><commentaire-court></commentaire-court></manif></salle><salle codsal=""><nom_salle></nom_salle><ville></ville><pays>FR</pays><manif codman=""><nom_manif></nom_manif><genre></genre><sous-famille /><url></url><image></image><date_debut>07/12/2007</date_debut><date_fin>07/12/2007</date_fin><prix_min>1170</prix_min><prix_max>1170</prix_max><dispo>1</dispo><commentaire-long></commentaire-long><commentaire-court></commentaire-court></manif><manif codman=""><nom_manif>

Comment faire pour lister chaque salle ?
J'ai essayé simplement ca :

Code :
1
2
$xml = simplexml_load_file("../rsc/xml/catalogfull.xml");
print_r($xml->salle);
Mais ca ne fonctionne pas !

J'obtiens ce truc :
Citation:
SimpleXMLElement Object ( [@attributes] => Array ( [codsal] => LIFO3 ) [nom_salle] => [ville] => [pays] => FR [manif] => SimpleXMLElement Object ( [@attributes] => Array ( [codman] => ) [nom_manif] => [genre] => Concerts [sous-famille] => SimpleXMLElement Object ( ) [url] => [image] => [date_debut] => 20/11/2007 [date_fin] => 20/11/2007 [prix_min] => [prix_max] => [dispo] => 1 [commentaire-long] => SimpleXMLElement Object ( ) [commentaire-court] => SimpleXMLElement Object ( ) ) )

Aidez-moi s'il vous plait.

Merci !
mathieu3392 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 19h59   #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
Citation:
Envoyé par mbsofts
Je cherche donc une méthode de parse qui fonctionne avec la plupart des flux xml; pouvez-vous m'aider ?
C'est à dire ? Si vous n'avez pas de structure prédéfinie ça va être difficile de parser le document surtout avec SimpleXML.

Citation:
Envoyé par mbsofts
Comment faire pour lister chaque salle ?
Tout est indiqué dans la documentation : c'est possible avec une boucle foreach, par exemple :
Code :
1
2
3
4
5
6
$sxml = simplexml_load_file("../rsc/xml/catalogfull.xml");
 
foreach ($sxml->salle as $s) {
    echo $s->pays;
    echo $s->date_debut;
}
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 21h37   #3
Invité régulier
 
Inscription : juin 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 87
Points : 8
Points : 8
Envoyer un message via MSN à mathieu3392
c'est bien cela la problématique, en effet il n'y aura pas de structure prédéfinie. Mais penses tu que je puisse en personnalisant le script pour chaque flux réussir ce que je veux avec simple xml ??

merci pour ton explication, j'avais bien compris cela mais cela semble ne pas fonctionner ? enfin, ya til une limite de taille d'un fichier xml pour SimpleXML ? Sachant que je ne ferai bien entendu pas cela à l'éxecution, tout le traitement ne sera effectué qu'une fois par jour pour alimenter une base de données.
mathieu3392 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 23h41   #4
Invité régulier
 
Inscription : juin 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 87
Points : 8
Points : 8
Envoyer un message via MSN à mathieu3392
dans le code que j'ai fournis au-dessus, je n'arrive pas à accéder à la balise "commentaire-long" ou "commentaire-court" ! Comment faire ? Comment voir ce qu'il y a dans le SimleXMLElement ?

Merci de votre aide à tous
mathieu3392 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2007, 23h54   #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
Citation:
Envoyé par mbsofts
c'est bien cela la problématique, en effet il n'y aura pas de structure prédéfinie. Mais penses tu que je puisse en personnalisant le script pour chaque flux réussir ce que je veux avec simple xml ??
Ce serait une solution à moins d'être en mesure d'identifier le flux ou plus simplement son origine via un paramètre par un exemple (en fonction de comment vous le récupérez).

Citation:
Envoyé par mbsofts
j'avais bien compris cela mais cela semble ne pas fonctionner ?
Par rapport à votre structure XML et le dump de $xml->salle, cela me semble pourtant correct

Citation:
Envoyé par mbsofts
enfin, ya til une limite de taille d'un fichier xml pour SimpleXML ?
Un traitement DOM demande plus de ressources : toutes les données sont rassemblées en mémoire sous la forme d'un arbre avant que vous nous puissez entreprendre la moindre opération. Donc la première limite est certainement la mémoire, par la directive memory_limit, et le temps d'exécution (max_execution_time). Toutefois, pour ce qui est tâche programmée, qui demande souvent plus de ressources, on passe généralement par l'interpréteur de commande (CLI) qui n'est normalement pas autant entravé par ces limites (cela dit il est préférable d'avoir de telles limites pour une exécution passant par le serveur web). Il y a éventuellement des alternatives plus performantes dont l'extension XMLReader.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 10h11   #6
Invité régulier
 
Inscription : juin 2005
Messages : 87
Détails du profil
Informations forums :
Inscription : juin 2005
Messages : 87
Points : 8
Points : 8
Envoyer un message via MSN à mathieu3392
merci pour toutes ces précisions !
je vais tenir compte de ces remarques;
par contre n'aurai-tu pas une solution pour que je puisse accéder à commentaire-long et commentaire-court ?? Cela renvoi apparemment des SimpleXMLElements, mais d'après ce que j'ai compris ce sont des objets, comment voir ce qu'ils contiennent ?

Merci
mathieu3392 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2007, 11h11   #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
Citation:
Envoyé par mbsofts
n'aurai-tu pas une solution pour que je puisse accéder à commentaire-long et commentaire-court ?? Cela renvoi apparemment des SimpleXMLElements, mais d'après ce que j'ai compris ce sont des objets, comment voir ce qu'ils contiennent ?
Par une cast (même implicite, ce que réalise en interne un certain nombre de fonctions) ? Il est, en effet, parfois nécessaire d'y recourir explicitement :
Code :
$comlong = (string) $sxml->salle[0]->{'commentaire-long'};
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h19.


 
 
 
 
Partenaires

Hébergement Web