Parser et mettre en page php un gros flux xml

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bibou2635, 2 Janvier 2007.

  1. bibou2635
    bibou2635 Nouveau WRInaute
    Inscrit:
    2 Mai 2005
    Messages:
    46
    J'aime reçus:
    0
    Bonsoir à tous,

    et bonne année à toute l’équipe de WRI et les Wrinautes

    Je suis depuis plus d'une semaine à la recherche d'info pour parser et mettre en page un gros fichier xml et j'avoue que j'ai le cerveau en bouillie (completement novice dans ce langage).

    J'ai fait toutes sortes d'essais mais en vain (magierss ne donne rien). J'en suis à tel point que je ne sais plus quoi, comment ni où (tellement j'ai lu et essayé des trucs que je ne sais pas faire fonctionner)

    Si quelqu'un peut m'aider s'il vous plaît (la version php du serveur est la 4.4.4)

    Et la structure du xml est :

    Code:
    <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
    
    </products><product>
    <id></id>
    <name></name>
    <manufacturer></manufacturer>
    <description></description>
    <category></category>
    <number-of-retailers></number-of-retailers>
    <image-url width="1024" height="768"></image-url>
    <image-url width="1024" height="768"></image-url>
    <category-url></category-url>
    <prices-url></prices-url>
    <details-url></details-url>
    <reviews-url></reviews-url>
    <expertreviews-url></expertreviews-url>
    <rating type="professional">
    <average></average>
    <num-ratings></num-ratings>
    </rating>
    <lowest-price currency="EUR"></lowest-price>
    <retailer>
    <name></name>
    <info-url></info-url>
    <link></link>
    <logo height="50" width="69"></logo>
    <lead-time></lead-time>
    <price currency="EUR"></price>
    <source-type></source-type>
    <source-date></source-date>
    <price-with-shipping-min currency="EUR"></price-with-shipping-min>
    <price-with-shipping-max currency="EUR"></price-with-shipping-max>
    </retailer>
    <retailer>
    <name></name>
    <info-url></info-url>
    <link></link>
    <logo height="28" width="150"></logo>
    <lead-time></lead-time>
    <price currency="EUR"></price>
    <source-type></source-type>
    <source-date></source-date>
    <price-with-shipping-min currency="EUR"></price-with-shipping-min>
    <price-with-shipping-max currency="EUR"></price-with-shipping-max>
    </retailer>
    </product>
    </products>
    
    Pour ou commencer ? A quoi doit ressembler la structure de la page ? Si vous pouviez m'aider en me montrant le chemin s'il vous plaît ?

    bibou

    [Edit HawkEye: ajouté [ code] et [ /code]... c'est plus lisible ;)]
     
  2. athoms
    athoms WRInaute discret
    Inscrit:
    22 Avril 2004
    Messages:
    212
    J'aime reçus:
    0
    Bonjour,

    Je te conseille personnellement de passer par une solution comme magpierss. Cette librairie open source permet de parser un fichier xml et utilise un système de cache. après tu n'as qu'une fonction a appeler (et modifier) pour parser et afficher (ou encore stocker) ton fichier/flux XML.

    fais une recherche google, sur magpierss tu devrais trouver ton bonheur :)
     
  3. bibou2635
    bibou2635 Nouveau WRInaute
    Inscrit:
    2 Mai 2005
    Messages:
    46
    J'aime reçus:
    0
    Bonjour athoms et merci de ta réponse :D

    En fait j'ai testé magpierss et ça marche pour le flux RSS de WRI mais pour mon fichier xml rien :?

    J'ai bien compris qu'il fallait adapter le fichier nommé feedparser.php dans le tuto de WRI et du dico du net mais je ne sais pas faire (et à force de chercher, je me suis complètement embrouillé)

    J'ai lu aussi en fouillant sur le net qu'il pouvait y a avoir des bugs avec les fichiers inclus dans magpierss portant l'exention .inc et qu'il fallait les modifier en .inc.php (selon la version php du serveur)

    Ce que j'ai fait et ça marche toujours avec le RSS de WRI mais pas avec mon flux XML.

    Je vous assure, j'ai fouillé tout ce que l'on trouve sur ce sujet mais par où commencer ? certains parlent de DOM, SAX, XSL mais tout ça c’est du langage de programmeur et pour un novice 8O

    Quel est le chemin à suivre pour un débutant ? Y a t’il un bouquin du genre pour les nuls ? Ou quelqu’un peut me faire un devis de réalisation ?

    Merci de votre aide s'il vous plaît

    bibou
     
  4. DomicilePC
    DomicilePC WRInaute discret
    Inscrit:
    17 Janvier 2005
    Messages:
    169
    J'aime reçus:
    0
    Ca vient peut-être de la grandeur du fichier à parser (>4Mo).
    Essaie d'en faire un plus petit (une dizaine de référence) et vois si ça fonctionne).
    Si oui, il ne te reste plus qu'à faire plusieurs fichiers xml plus petits (<4Mo)
     
  5. bibou2635
    bibou2635 Nouveau WRInaute
    Inscrit:
    2 Mai 2005
    Messages:
    46
    J'aime reçus:
    0
    Bonjour DomicilePC

    Mon fichier XML ne fait que 47 ko :?
     
  6. athoms
    athoms WRInaute discret
    Inscrit:
    22 Avril 2004
    Messages:
    212
    J'aime reçus:
    0
    A titre d'info, pour magpierss j'ai eu un petit soucis, de majuscule. j'ai installé la distrib courante sur mon pc windows, ça marchait bien mais en transferrant sous unix ça ne marchait plus. Simplement le Snoopy.inc.machin avait perdu sa majuscule. a verifier donc.

    Tiens je te copie colle la solution proposée poar le site nord-cinema (tres bien fait ce site à tout point de vue) pour parser dux XmL sans magpierss.


    Code:
    <!-- Exemple d'utilisation de l'uns de nos fils RSS pour afficher uniquement les titres des films de la semaine - Attention : Votre hébergeur doit supporter le PHP pour pouvoir utiliser ce code sur votre site-->
    <?php
    $site = "http://www.nord-cinema.com/rss.php";
    $fp = @fopen($site,"r");
    while(!feof($fp)) $raw .= @fgets($fp, 4096);
    fclose($fp);
    if( eregi("<item>(.*)</item>", $raw, $rawitems ) ) {
     $items = explode("<item>", $rawitems[0]);
     for( $i = 0; $i < count($items)-1; $i++ ) {
      eregi("<title>(.*)</title>",$items[$i+1], $title );
      eregi("<link>(.*)</link>",$items[$i+1], $url );
      eregi("<description>(.*)</description>",$items[$i+1], $description);
      echo "<li><a href='".$url[1]."' title='".$description[1]."'target=\"_blank_\">$title[1]</a></li>";
     }
    }
    echo "<li><a href=\"http://www.nord-cinema.com\" title=\"Toutes les sorties cinéma cette semaine et à venir\" target=\"_blank_\">Toutes les sorties cinéma</a></li>";
    ?>
    Par contre pas de cache :)-() mais ça peut être la solution. Pour ton fichier xml, celui-ci n'est pas du rss, c'est pourquoi tu dois remplacer dans le code ci dessus pour gerer les emelents de ton flux.

    Par exemple remplacer
    Code:
    eregi("<title>(.*)</title>",$items[$i+1], $title );
    par
    Code:
    eregi("<name>(.*)</name>",$items[$i+1], $name );
    En fait remplacer les balises par défaut du rss, par les balises de ton xml. C'est très simple : au lieu d'item, ton xml est structuré par products. remplacer donc items par products ainsi que les autres balises :
    Code:
    eregi("<name>(.*)</name>",$items[$i+1], $name );
    eregi("<manufacturer->(.*)</manufacturer>",$items[$i+1], $name )
    etc..

    Voila ça devrait marcher. Tu englobes le tout dans une petite fonction, et le tour est joué ;-)

    enfin j'espere pour toi.
    voila
     
  7. ecocentric
    ecocentric WRInaute accro
    Inscrit:
    10 Février 2004
    Messages:
    2 653
    J'aime reçus:
    0
    regarde pê simplexml en PHP5
     
  8. bibou2635
    bibou2635 Nouveau WRInaute
    Inscrit:
    2 Mai 2005
    Messages:
    46
    J'aime reçus:
    0
    Merci athoms pour cette source d'info, allez je vais remetrre les mains dans le cambouie :?

    Je vous tiens au courant :D

    ecocentric, je ne suis pas en php 5 mais en 4 mais merci quand même du tuyau :wink:
     
  9. bibou2635
    bibou2635 Nouveau WRInaute
    Inscrit:
    2 Mai 2005
    Messages:
    46
    J'aime reçus:
    0
    J'ai laissé tomber ce truc de fou, j'ai tout essayé dans mes possibilités mais là c'est de l'ordre de développeur :(

    Merci à vous quand même :wink:
     
  10. Didier_S
    Didier_S WRInaute occasionnel
    Inscrit:
    24 Août 2004
    Messages:
    470
    J'aime reçus:
    2
    euh, même pour un développeur, gérer du xml en php4, ça a toujours été une tannée... à tel point qu'on a organisé une migration sur un site du boulot (800k VU/mois, ça fait cher de l'heure de coupure) notamment pour arrêter avec ça. grosse galère.

    en bref, si vraiment tu veux manipuler du xml, tourne-toi vers le php5: les différences ne sont pas énormes (si on utilise "basiquement"), et ta vie sera facilitée.
     
  11. Malaiac
    Malaiac WRInaute occasionnel
    Inscrit:
    4 Mai 2005
    Messages:
    266
    J'aime reçus:
    0
    php4 => www.simplepie.org est ton ami.
    php5 => simplexml + eventuellement XML to Array (pour passer l'objet simplexml en array php classique)
     
  12. WebRankInfo
    WebRankInfo Admin
    Membre du personnel
    Inscrit:
    19 Avril 2002
    Messages:
    20 879
    J'aime reçus:
    843
    Merci Malaiac pour simplepie je ne connaissais pas et ça semble pas mal du tout
     
  13. ecocentric
    ecocentric WRInaute accro
    Inscrit:
    10 Février 2004
    Messages:
    2 653
    J'aime reçus:
    0
    Après pas mal de tests, ça fonctionne bien mieux que Zend Feed (qui ne propose pas d'interface homogène pour l'accès aux propriétés des flux et semble bloquer sur les RDF) et même que MagpieRSS (qui semblerait plus sensible à la formation du flux).
     
  14. gabriel_f
    gabriel_f Nouveau WRInaute
    Inscrit:
    12 Janvier 2007
    Messages:
    18
    J'aime reçus:
    0
    Salut.

    Ton fichier xml me semble mal formé de base, ca doit pas plaire au parseur :
    </products><product>
    Avoir un element fermé en racine ca craint un peu

    pour le reste bin il te reste toujours la possibilité d'y appliquer un xslt
    http://www.w3schools.com/xsl/xsl_intro.asp
    (beaucoup plus simple qu'il n'y parait)

    Courage ! le xml ca à l'air chiant mais une fois qu'on met un peu les mains dedans on fait des choses tres performantes tres vite ! =)
     
Chargement...
Similar Threads - Parser mettre php Forum Date
Parser en php un fichier xml Développement d'un site Web ou d'une appli mobile 12 Juin 2020
Parser un fichier xml : simplexml_load_file Développement d'un site Web ou d'une appli mobile 5 Avril 2019
Problème pour parser du xml Développement d'un site Web ou d'une appli mobile 26 Février 2015
Parser du XML Développement d'un site Web ou d'une appli mobile 31 Mars 2012
Parser XML et Mysql Administration d'un site Web 21 Décembre 2011
Parser un flux XML en PHP pour récupérer une valeur Développement d'un site Web ou d'une appli mobile 10 Février 2011
parser une page html Développement d'un site Web ou d'une appli mobile 2 Mars 2010
Parser flux atom facebook Développement d'un site Web ou d'une appli mobile 15 Février 2010
Problème pour parser du contenu en PHP Développement d'un site Web ou d'une appli mobile 2 Février 2010
Parser une page web en html Développement d'un site Web ou d'une appli mobile 31 Janvier 2010
Problème feedparser et nouvelle page phpbb Développement d'un site Web ou d'une appli mobile 14 Janvier 2010
problème utilisation feedparser Développement d'un site Web ou d'une appli mobile 3 Janvier 2010
DOM Parser (probleme) Développement d'un site Web ou d'une appli mobile 31 Décembre 2009
Parser une page web en utilisant php Développement d'un site Web ou d'une appli mobile 25 Décembre 2009
parser du xml Développement d'un site Web ou d'une appli mobile 30 Mars 2009
[Résolu] Cannot redeclare class XMLParser in ... Développement d'un site Web ou d'une appli mobile 22 Décembre 2008
Parser XML balises sur plusieurs niveaux (API amazon) Développement d'un site Web ou d'une appli mobile 9 Décembre 2008
Parser un xml simple Développement d'un site Web ou d'une appli mobile 4 Décembre 2008
Parser XML Développement d'un site Web ou d'une appli mobile 18 Novembre 2008
Feedparser et magpierss : deux flux différents sur deux div Développement d'un site Web ou d'une appli mobile 17 Septembre 2008