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 :

[XML] [SAX] Comment Parser du XML


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut [XML] [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.

  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 778
    Points
    17 778
    Par défaut
    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 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    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 ?

  4. #4
    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 778
    Points
    17 778
    Par défaut
    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.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Je ne peux donc pas utiliser SIMPLEXML étant donné que mes fichiers sont volumineux ?
    Je dispose d'un serveur dédié.

  6. #6
    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 778
    Points
    17 778
    Par défaut
    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.)

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    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 ?

  8. #8
    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 778
    Points
    17 778
    Par défaut
    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)

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    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

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Sinon, j'ai posé la question sur quel outil utiliser pour parser a une connaissance.
    Il m'a répondu :
    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 ?

  11. #11
    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 778
    Points
    17 778
    Par défaut
    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

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    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.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2011, 09h43
  2. [C#] Comment parser un flux XML ?
    Par Dunkan dans le forum C#
    Réponses: 1
    Dernier message: 22/09/2006, 13h32
  3. [XML] Comment parser ce fichier XML avec java !
    Par jlassira dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 13/03/2006, 12h56
  4. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52
  5. [XML] Comment parser ?
    Par GLDavid dans le forum Modules
    Réponses: 7
    Dernier message: 03/03/2005, 02h59

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