Parser un flux XML en PHP pour récupérer une valeur

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par milkiway, 10 Février 2011.

  1. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    Bonjour,

    J'ai un flux XML que je veux parser en PHP. J'utilise simplexml_load_file.
    Code:
    <?xml version="1.0" encoding="UTF-8"?>
    <catalogue id="1">
     <progname>Panzani</progname>
     <store>
      <name>Panzani Pasta</name>
      <products>
       <product>
        <storeData>
         <data type="modele">Farfale</data>
         <data type="prix_catalogue">3.35</data>
        </storeData>
      </product>
      </products>
     </store>
    </catalogue>
    J'arrive sans souci à récupérer la valeur de "progname" (Panzani ici), store->name mais je ne vois pas du tout comment récupérer la donnée Farfale par exemple.
    J'ai testé par store->products->product->storeData->data['modele'] mais ça ne marche pas. Pourquoi ? Comment faire ?

    Un grand merci
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 126
    J'aime reçus:
    318
    PHP:
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php <br />$string </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword"><<<EOT<br /></span><span class="syntaxdefault"><?xml version="1.0" encoding="UTF-8"?><br /><catalogue id="1"><br /><progname>Panzani</progname><br /><store><br />  <name>Panzani Pasta</name><br />  <products><br />   <product><br />    <storeData><br />     <data type="modele">Farfale</data><br />     <data type="prix_catalogue">3.35</data><br />    </storeData><br />  </product><br />  </products><br /></store><br /></catalogue><br /></span><span class="syntaxkeyword">EOT;<br /></span><span class="syntaxdefault">$xml </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> simplexml_load_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$string</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$data </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(string)</span><span class="syntaxdefault"> $xml</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">store</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">products</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">product</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">storeData</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">data</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">];<br /><br /></span><span class="syntaxdefault">echo $data</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">?><br /></span></span>
    http://codepad.org/ohKMRETR
     
  3. milkiway
    milkiway WRInaute accro
    Inscrit:
    3 Février 2004
    Messages:
    4 237
    J'aime reçus:
    0
    Merci beaucoup, en fait par ce biais là j'y arrivais bien mais ce n'est pas très sur dans le sens où je en suis pas certain que 0 soit bien pour modèle (il suffit qu'il change de place).
    J'ai donc fait autrement :
    foreach($flux->store->products->product as $product){
    foreach ($product->storeData->data as $node) {
    $data[(string) $node['type']] = (string) $node;
    }
    Fourni sur un autre forum.
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 126
    J'aime reçus:
    318
    Avec SimpleXML et Xpath
    PHP:
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php&nbsp;<br />$string&nbsp;</span><span class="syntaxkeyword">=&nbsp;<<<EOT<br /></span><span class="syntaxdefault"><?xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"?><br /><catalogue&nbsp;id="1"><br /><progname>Panzani</progname><br /><store><br />&nbsp;&nbsp;<name>Panzani&nbsp;Pasta</name><br />&nbsp;&nbsp;<products><br />&nbsp;&nbsp;&nbsp;<product><br />&nbsp;&nbsp;&nbsp;&nbsp;<storeData><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<data&nbsp;type="modele">Farfale</data><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<data&nbsp;type="prix_catalogue">3.35</data><br />&nbsp;&nbsp;&nbsp;&nbsp;</storeData><br />&nbsp;&nbsp;</product><br />&nbsp;&nbsp;</products><br /></store><br /></catalogue><br /></span><span class="syntaxkeyword">EOT;<br /></span><span class="syntaxdefault">$xml&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">simplexml_load_string</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$string</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$modele&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">$xml</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">xpath</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/catalogue/store/products/product/storeData/data[@type&nbsp;=&nbsp;"modele"]'</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$prix_catalogue&nbsp;</span><span class="syntaxkeyword">=&nbsp;</span><span class="syntaxdefault">$xml</span><span class="syntaxkeyword">-></span><span class="syntaxdefault">xpath</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'/catalogue/store/products/product/storeData/data[@type&nbsp;=&nbsp;"prix_catalogue"]'</span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">$modele&nbsp;</span><span class="syntaxkeyword">=&nbsp;(string)&nbsp;</span><span class="syntaxdefault">$modele</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">$prix_catalogue&nbsp;</span><span class="syntaxkeyword">=&nbsp;(string)&nbsp;</span><span class="syntaxdefault">$prix_catalogue</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">0</span><span class="syntaxkeyword">];<br /><br />echo&nbsp;</span><span class="syntaxdefault">$modele</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'<br&nbsp;/>'</span><span class="syntaxkeyword">;<br />echo&nbsp;</span><span class="syntaxdefault">$prix_catalogue</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">?><br /></span></span>
     
Chargement...
Similar Threads - Parser flux XML 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
Probléme avec un flux rss Demandes d'avis et de conseils sur vos sites 4 Novembre 2019
Google Merchant flux de produit AdWords 17 Octobre 2019
Redirection bizarre impactant un flux RSS Netlinking, backlinks, liens et redirections 11 Novembre 2018
Comment intégrer un flux XML affiliation sur mon site WordPress ? Monétisation d'un site web 3 Octobre 2018
Afflux d'abonnés Demandes d'avis et de conseils sur vos sites 26 Avril 2017