Questions concernant le parsing de flux XML en PHP

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par milkiway, 16 Novembre 2010.

  1. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 238
    J'aime reçus:
    0
    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 :
    $flux = simplexml_load_file($xml);
    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
     
  2. fobec
    fobec WRInaute discret
    Inscrit:
    10 Mai 2005
    Messages:
    189
    J'aime reçus:
    0
    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 ?
     
  3. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 238
    J'aime reçus:
    0
    Bonjour,

    Merci.

    En fait pour l'instant j'utilise tout simplement ceci pour afficher mon flux :
    Code:
    $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:
    <?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.
     
  4. fobec
    fobec WRInaute discret
    Inscrit:
    10 Mai 2005
    Messages:
    189
    J'aime reçus:
    0
    regarde du coté de la fonction query de la librairie XPath. Il existe pas mal de tuto sur le net https://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.
     
  5. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    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:
    SELECT trademark, title, desc FROM product
    puis un :
    Code:
    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:
    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"
     
  6. mayalali
    mayalali Nouveau WRInaute
    Inscrit:
    6 Mai 2012
    Messages:
    1
    J'aime reçus:
    0
    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!
     
  7. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    8 719
    J'aime reçus:
    232
Chargement...
Similar Threads - Questions concernant parsing Forum Date
Questions concernant La déclaration européenne de services (DES) Droit du web (juridique, fiscalité...) 16 Janvier 2018
Questions concernant l'affichage des informations Google + dans les SERPs Google+ 30 Avril 2015
Questions concernant la concurrence Problèmes de référencement spécifiques à vos sites 27 Août 2013
Questions concernant le duplicate content Débuter en référencement 2 Décembre 2010
Quelques questions toutes bête concernant le référencement ! Débuter en référencement 30 Novembre 2010
2 questions d'un néophyte Débuter en référencement 15 Juillet 2019
Questions à propos d'AMP et du carrousel Référencement Google 27 Mai 2019
Questions bloc SEO Référencement Google 12 Avril 2019
Audit RM Tech : Questions sur les recommandations Débuter en référencement 1 Avril 2019
Profil Facebook transformé en page : questions SVP Facebook 18 Février 2019
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice