Parser et mettre en page php un gros flux xml

Nouveau WRInaute
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 ;)]
 
WRInaute discret
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 :)
 
Nouveau WRInaute
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
 
WRInaute discret
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)
 
WRInaute discret
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
 
Nouveau WRInaute
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:
 
Nouveau WRInaute
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:
 
WRInaute occasionnel
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.
 
WRInaute accro
WebRankInfo a dit:
Merci Malaiac pour simplepie je ne connaissais pas et ça semble pas mal du tout

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).
 
Nouveau WRInaute
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 ! =)
 
Discussions similaires
Haut