Questions concernant le parsing de flux XML en PHP


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Questions concernant le parsing de flux XML en PHP

Message le Mar Nov 16, 2010 8:49

BOnjour,

Je suis totalement novice en ce qui concerne la gestion / parsing de flux XML avec PHP.
J'ai découvert SimpleXML, c'est super.
D'habitude je travaille avec MySQL mais là le flux XML vient de l'externe et doit être mis à jour toutes les 24h donc je ne peux pas passer par une BDD.

Seulement le flux fait 500 Mo...
Questions :
Je pense récupérer le flux tous les jours à minuit, le stocker en local puis le charger via :
[url]$flux = simplexml_load_file($xml);[/url]
Cette fonction va charger tout le flux en RAM ? Si oui mon serveur va exploser rapidement.
Et ça va être très lent non ? (parser un flux de 500 Mo à chaque page...).
Avec une BDD on ne charge que la / les lignes qui nous intéressent avec les champs qu'on veut.

Quel est le fonctionnement concret et quelles sont les ressources utilisées par le système pour un flux XML ?

Merci


fobec
WRInaute discret
WRInaute discret
 
Messages: 112
Inscription: 10 Mai 2005

Re: Questions concernant le parsing de flux XML en PHP

Message le Mar Nov 16, 2010 9:43

Bonjour,

il existe 2 méthodes pour parser un flux XML:
- DOM : le fichier est lu en entier pour construire un arbre avec les données. Tout le fichier est effectivement en RAM.
fonctions de type simplexml_load_file, XPath, ...
- SAX: le XML est lu au fur et à mesure. A chaque nœud, plusieurs évènements sont déclenchés dont on se sert en général pour alimenter un liste de donnée.

Avec 500Mo, la méthode SAX est la solution qui consomme le moins de ressources.
As-tu déjà fait des tests avec le flux XML ?


milkiway
WRInaute accro
WRInaute accro
 
Messages: 4910
Inscription: 3 Fév 2004

Re: Questions concernant le parsing de flux XML en PHP

Message le Mar Nov 16, 2010 10:02

Bonjour,

Merci.

En fait pour l'instant j'utilise tout simplement ceci pour afficher mon flux :
Code: Tout sélectionner
$xml = 'xml/monflux.xml';
$flux = simplexml_load_file($xml);
foreach($flux->store->products->product as $product){
echo $product->title.'<br />';
}

Pour faire des essais. Je suis sur PHP5.
Ca m'affiche tous les titres soit des milliers de lignes.

Je voudrais faire des sortes de SELECT (comme sur MySQL) dans ce flux mais je ne vois pas comment faire.
Et pour tout dire, je n'ai pas compris la différence entre DOM, SimpleXML etc. C'est du chinois pour moi.

En fait j'aborde l'XML dans une logique base de données, tu vois ?

Exemple de flux :
Code: Tout sélectionner
<?xml version="1.0" encoding="UTF-8"?>
<catalogue>
<store>
  <name>Vendeur 1</name>
  <products>
   <product>
    <trademark>Intel</trademark>
    <title>Intel Core i5 760</title>
    <desc>Un bon CPU pour tous les usages.</desc>
   </product>
   <product>
    <trademark>Intel</trademark>
    <title>Intel Core i7 760</title>
    <desc>Un CPU pour les applications exigeantes</desc>
   </product>
   <product>
    <trademark>AMD</trademark>
    <title>AMD Phenom II X6</title>
    <desc>Un CPU pour les serveurs</desc>
   </product>
  </products>
</store>
<catalogue>


Ici, par exemple, je voudrais pouvoir faire un genre de requête pour n'afficher le "title" QUE des CPU AMD et du vendeur 'Vendeur 1' (en imaginant qu'il y a 20 vendeurs différents).

Et c'est justement sur cette extraction que je bloque.


fobec
WRInaute discret
WRInaute discret
 
Messages: 112
Inscription: 10 Mai 2005

Re: Questions concernant le parsing de flux XML en PHP

Message le Mar Nov 16, 2010 11:01

regarde du coté de la fonction query de la librairie XPath. Il existe pas mal de tuto sur le net http://www.google.fr/search?q=PHP+Xpath+Query+regular
Avec les expressions régulières, on peut définir des filtres et se servir du XML comme d'une DB.

L'autre solution est de le faire soi-même en PHP dans la boucle foreach ou en passant par un array intermédiaire.


Julia41
WRInaute passionné
WRInaute passionné
 
Messages: 1765
Inscription: 31 Aoû 2007

Re: Questions concernant le parsing de flux XML en PHP

Message le Mar Nov 16, 2010 12:26

Pour ton fichier .xml qui fait 500Mo, je pense que PHP va subir.
Si tu es sous dedié, tu pourrais faire quelques tests.

Sinon, Simple_XML est la solution oui.
Si avant tu faisais un :
Code: Tout sélectionner
SELECT trademark, title, desc FROM product

puis un :
Code: Tout sélectionner
while ($arr = mysql_fetch_assoc($query)) {

}

Là avec ton foreach, c'est pareil.
Sauf que tu dois store quelque part avant d'analyser.
A ta place je rentrerais tout dans mysql avec ton foreach
Code: Tout sélectionner
foreach ...
INSERT INTO $xml->bla->blb->blc

et après avec ta requête.

Tu fais quoi comme type de SELECT ?
Sinon, en bash un:
cat fichier.xml | grep "ce que tu cherche"

mayalali
Nouveau WRInaute
Nouveau WRInaute
 
Messages: 1
Inscription: 6 Mai 2012

Re: Questions concernant le parsing de flux XML en PHP

Message le Dim Mai 06, 2012 10:09

bonjour, j'ai un souci avec le flux xml, en faite moi je cherche une fonction qui charge juste une partie de fichier xml, et ce fichier xml se trouve dans une adresse, donc elle parse juste une partie de ce flux et pas le fichier en entier, il existe un moyen de lire un flux xml en indiquant l'adresse de fichier xml et la partie a parser? merci de me répondre car j'ai cherché pas mal de tutoriels mais j'ai pas trouvé mon cas, SVP aider moi!


spout
WRInaute accro
WRInaute accro
 
Messages: 4382
Inscription: 14 Mai 2003

Re: Questions concernant le parsing de flux XML en PHP

Message le Dim Mai 06, 2012 10:22

C'est surement faisable avec: http://pipes.yahoo.com/pipes/


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités