Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
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 16/04/2007, 19h07   #1
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Par défaut [SAX] Comment Parser du XML

Bonjour,

Je suis sur un projet ou dans une première phase il faut récupérer des données dans plusieurs flux XML.
Ces flux XML contiennent tous les mêmes données sur des produits de commerce (nom, description, prix, disponibilité, frais de port etc...).
Il faut classer ces informations dans un tableau puis les enregistrer dans une table.
Le problème est que les balises de chaque flux sont différentes, ils ont tous un gabarit différent.
Par exemple pour les frais de port ca peut être <frais>, <fraisdeport>, <fraisport>, <frais_de_port>, <port> etc...
Et il y a aussi un problème de chemin, <frais_de_port> peut très bien être dans <prix> comme il peut ne pas y être.

J'ai donc eu l'idée d'enregistrer les gabarits dans une table en disant par exemple que prix->frais_de_port correspond aux frais de ports et à la boutique 6.
En effet j'ai lu la doc et d'après ce que j'ai compris il faut enregistrer sous cette forme un->deux->trois.
Si vous pouviez me confirmer ceci, merci.

Mais je n'ai pas tout a fais saisi comment parser.
C'est pour celà que je vous demande de l'aide, si vous pouviez m'expliquer ou me passer l'adresse d'un dictaciel clair (car la doc est nuageuse pour moi ^^)

Merci pour votre aide, ludo.
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 20h01   #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
La version de php est à prendre en compte pour commencer. En effet, sous php4 vous aurez DOM XML alors que sous php5 vous trouverez plutôt SimpleXML et DOM. Voir même utiliser une méthode de parsing Sax

Profitez-en pour vérifier, à l'aide de phpinfo, qu'une telle extension est également disponible. Quelle taille font ces fichiers ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 20h20   #3
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Alors c'est PHP 5 qui est utilisé, je pourrais donc utiliser simplexml.
Quant aux fichier, ils seront assez volumineux, ce sont les listes des produits de grands commerces en ligne du genre cdiscount, rueducommerce etc...
Pourquoi cette question sur la taille des fichiers ?
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 21h59   #4
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 d'autant plus que SimpleXML est plus confortable à utiliser

Citation:
Envoyé par Masterlud
Pourquoi cette question sur la taille des fichiers ?
La méthode de parsing appelée DOM (qu'utilise également SimpleXML) implique un chargement intégral du document XML en mémoire sous la forme d'un arbre ce qui demande donc plus de ressources et ne convient pas aux fichiers vraiment volumineux. La méthode SAX constitue son "contraire" car il s'agit de réagir (appel d'une fonction dite de callback) à chaque élément rencontré (commentaire, début de balise, fin de balise, ...) et mobilise très peu de ressources. Quoique avec PHP on est limité au niveau de la mémoire (directive memory_limit) et sur le temps d'exécution d'un script (directive max_execution_time). Toutefois sur un serveur dédié, vous pourrez reconfigurer ces paramètres de manière ponctuelle ou non.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 22h24   #5
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Je ne peux donc pas utiliser SIMPLEXML étant donné que mes fichiers sont volumineux ?
Je dispose d'un serveur dédié.
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 22h59   #6
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
Si bien sûr, tout dépend ce qu'on appelle volumineux. De toute manière puisque vous possédez un serveur dédié vous pourrez réajuster au besoin les paramètres que je vous ai donné plus haut. (PHP vous affichera des messages d'erreur si ça venait à arriver.)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 23h09   #7
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Ceci m'a intrigé et je suis aller jeter un coup d'oeil à ce problème sur le net.
J'ai vu quelque par que simplexml devait tout d'abord chargé le fichier xml en entier avant de le traiter et par conséquent celà posait un problème avec les fichiers volumineux.
C'est faux ?
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 23h26   #8
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
C'est ce que je disais quelques posts plus haut Mais pour être fixé faites-en l'essai (un simple appel à simplexml_load_file sur votre fichier)
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 23h30   #9
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Le serveur dédié n'est pas a ma disposition.
Je vais encore devoir attendre une semaine pour faire les tests.
Merci pour votre aide.
Le topic remontera surement à la suface quand j'aurais fais les tests
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 19h27   #10
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Sinon, j'ai posé la question sur quel outil utiliser pour parser a une connaissance.
Il m'a répondu :
Citation:
Une grosse boutique, c'est des XML qui peuvent aller jusqu'à qq centaines de Mo (si tu commences à faire dans le bouquin, etc.. il y a beaucoup de produits). Pour l'outil pour parser le XML, c'est du sur mesure, base sur le framework .Net de Microsoft
Qu'en pensez vous ?
Masterlud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 19h52   #11
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
Si vous êtes obligés de le faire en PHP il faut prendre tous les éléments en considération : environnement matériel, taille estimée de vos fichiers, utilisation/fréquence du traitement, ...

Vous avez dit dans votre premier post que vous deviez les trier avant de les insérer dans la base : dans ce cas un parsing de type SAX ne conviendra probablement pas. De plus, je ne sais pas exactement ce que vous entendez par tri mais une base de données offre aussi cette fonction (ORDER).

Enfin, si votre prestataire vous permet d'accéder à distance à votre base de données ça vous offre d'autres perspectives comme embaucher votre connaissance pour écrire cela en .net
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 20h26   #12
Invité de passage
 
Inscription : avril 2007
Messages : 24
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 24
Points : 4
Points : 4
Ce que j'entends par tri, c'est récupérer seulement les données qui m'intéressent.
Par exemple pour une liste de bouquins, si je veux le nom des bouqins mais pas la description.

Sinon j'ai oublié de préciser que je souhaite mettre à jour ces flux toutes les 24 heures, il faut donc que le traitement soit rapide.

La taille des fichiers xml peut monter très haut : ca peut être 50Mo comme ca peut être 500Mo.
Masterlud 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 02h52.


 
 
 
 
Partenaires

Hébergement Web