Parser et afficher flux xml

Fermé
Vitaly58 Messages postés 43 Date d'inscription samedi 2 avril 2011 Statut Membre Dernière intervention 15 novembre 2012 - 10 mai 2012 à 15:24
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 - 11 mai 2012 à 13:45
Bonjour,

J'ai un flux XML que je souhaite lire pour afficher les éléments sur mon site.

Le problème c'est que je ne connaît pas du tout le XML et en cherchant partout sur internet je n'ai pas trouver de réponse qui fonctionne.

Vous pourrez trouver le flux en question en cliquant sur le lien présent sur cette page :
http://www.annuaire-web-gratuit.nemesis-net.com/flux.html

Est-ce que quelqu'un sait comment faire pour afficher les éléments de ce flux sur une page PHP ?

Merci d'avance pour vos conseils.
A voir également:

1 réponse

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
10 mai 2012 à 17:15
Bonjour,

Houlààà.....

Ce flux est très complexe.

Pour moi, la solution "la plus simple" est de passer par simpleXml sous PHP.

Exemple:
$flux = simplexml_load_file("http://....ici l'adresse web du flux...");


$flux est alors un objet hiérarchisé.

Pour explorer la hiérarchie:

echo $flux->CatalogListings->Offer->Title;


devrait afficher: CANON EOS 550D + 15-85 IS + 70-300 IS USM

Pour les fonctions de simpleXml tout est ici:
https://www.php.net/manual/fr/simplexml.examples.php

personnellement, je vois pas plus simple....
0
Vitaly58 Messages postés 43 Date d'inscription samedi 2 avril 2011 Statut Membre Dernière intervention 15 novembre 2012 19
11 mai 2012 à 09:36
Bonjour,

Merci pour la réponse rapide.

Donc quelque chose comme ceci devrait afficher CANON EOS 550D + 15-85 IS + 70-300 IS USM ??

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<?php
$flux = simplexml_load_file("http://....ici l'adresse web du flux...");


echo $flux->CatalogListings->Offer->Title;
?>
</body>
</html>


Je ne suis pas certain que ça fonctionne. Peut-être y a-t-il quelque chose que je ne fais pas correctement...

Bonne journée.
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
11 mai 2012 à 10:06
Evidemment, si vous copiez/collez mon exemple, ça marchera pas.

ici:
http://....ici l'adresse web du flux...
à remplacer par l'adresse complète de votre flux XML source...

Utiliser print_r($flux) pour voir l'objet flux et sa construction...

Ensuite aller voir et comprendre la doc sur simpleXml.

Je vous donne une piste, à vous de vous "décarcasser" un chouille....

A+
0
Vitaly58 Messages postés 43 Date d'inscription samedi 2 avril 2011 Statut Membre Dernière intervention 15 novembre 2012 19
11 mai 2012 à 13:29
Oui, bien sur, je n'avais pas fait un copier coller...

J'ai réussi à afficher le flux comme ceci :
http://www.annuaire-web-gratuit.nemesis-net.com/testflux.php

Mais après, que faut-il faire pour récupérer les données et les mettre en forme ?

J'ai essayé echo $flux->CatalogListings->Offer->Title; mais ça ne fonctionne pas.

Merci
0
mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
11 mai 2012 à 13:45
c'est bien.

Vous voyez donc si vous passez en affichage comme ceci:

<pre>
<?php print_r($flux); ?>
</pre>


ce code:

[Offer] => Array


Offer est donc un sous-ensemble de CatalogListings, on y accède comme ceci:

$offers = $flux->catalogListings;


On accède à chaque élément de ce tableau de manière séquentielle comme ceci:

foreach($offers AS $key => $Offer) {
    print_r($Offer);  // pour voir ce que ça remonte si on a bien un contenu,
}


Si c'est OK, on a un objet, ce qui est indiqué ici:

[Offer] => Array
        (
            [0] => SimpleXMLElement Object


On accède donc ensuite à chaque sous-objet de $Offer appartenant à la classe simpleXml comme ceci:

foreach($offers AS $key => $Offer) {
    // print_r($Offer);  // pour voir ce que ça remonte si on a bien un contenu,
    echo $Offer->Title."<br/>\n";
}


Procéder également comme celà pour les autres lignes, exemple,

                    [Title] => CANON Reflex CANON EOS 550D + 18-135
                    [Description] => Résolution : 18,0 mégapixels-Objectif stabilisé : Oui-Ecran : 7,6 cm / Visée à l&#39;écran
                    [Images] => SimpleXMLElement Object
                        (
                            [Image] => SimpleXMLElement Object
                                (
                                    [Url] => http://r.kelkoo.com/r/fr/3504823/124901/90/90/http%3A%2F%2Fboulanger.scene7.com%2Fis%2Fimage%2FBoulanger%2F8714574550039_h_f_l_0/MuOKZLhFOhvIX4KZ.6QYAntZBlt.m4rer2oSyJVvLR8-
                                    [Height] => 90
                                    [Width] => 90
                                )


Pour la description, ce sera:

echo $Offer->description;


Pour l'URL d'une image:

echo $Offer->Images->Image->Url;


Pour l'affecter à une variable au lieu de l'afficher:

$urlImage = (string)$Offer->Images->Image->Url;


On force le transtypage...

Vous avez suivi?

A vous de jouer.

A+
0