IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Lecture d'un fichier xml distant


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut [SimpleXML] Lecture d'un fichier xml distant
    Bonjour,

    J'essaye de récupérer via php les informations contenues dans ce fichier : http://armory.worldofwarcraft.com/it...ip.xml?i=33140

    Etant donné que le site n'affiche le fichier xml qu'avec firefox, je passe par ce code pour y accéder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ch = curl_init();
    $timeout = 30; 
    $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_COOKIE, 'cookies=true; cookieLangId=fr_fr; cookieMenu=all');
    $file = curl_exec($ch);
    curl_close($ch);
    Pour récupérer une valeur particulière, j'ai d'abord essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $xml = new SimpleXMLElement($file);
     
    echo $xml->itemTooltip[0]->name;
    Mais ça ne m'affiche absolument rien. J'ai donc essayé la méthode de ce tuto, avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $dom = new DomDocument();
    $dom->load($file);
     
    $listeNames = $dom->getElementsByTagName('name');
    foreach($listeNames as $name)
    {
        echo $name->firstChild->nodeValue . "<br />";
    }
    Mais j'ai cette erreur :
    Warning: DOMDocument::load() [function.DOMDocument-load]: I/O warning : failed to load external entity "/homepages/30/d140950915/htdocs/gdlf/<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="/layout/item-tooltip.xsl"?><page globalSearch="1" lang="fr_fr" requestUrl="/item-tooltip.xml"> <itemTooltips> <itemTooltip> <id>33140</id> <name>Sang d'ambre</name> <icon>inv_jewelcrafting_lionseye_02</icon> <overallQualityId>4</overallQualityId> <bonding>1</bonding> <maxCount uniqueEquippable="1">1</maxCount> <classId>3</classId> <equipData> <inventoryType>0</inventoryType> </equipData> <damageData/> <gemProperties>+12 au score de critique des sorts</g
    in /homepages/30/d140950915/htdocs/gdlf/ajout.php5 on line 24
    La ligne 24 correspondant au
    J'ai juste besoin d'un système simple pour récupérer quelques valeurs, mais débutant dans l'utilisation du xml je ne vois pas du tout d'où proviennent mes erreurs.

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Premièrement, il faut bien indiquer l'entête User-Agent comme vous l'avez fait au départ sinon le serveur s'occupe d'appliquer le traitement XSLT pour vous puisqu'il détectera que vous ne prenez pas en charge cet aspect et vous renvoie alors du code HTML. Ce qui explique les erreurs obtenues lors de l'emploi de DOM.

    Deuxièmement, en ce qui concerne SimpleXML, votre chemin est incorrect. La racine est l'élément page et non itemTooltips : il faut donc faire apparaître ce dernier. Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $sxml->itemTooltips->itemTooltip->name;
    Troisièmement, si la fonctionnalité allow_url_fopen est active sur votre serveur il n'est pas nécessaire de passer par cURL pour obtenir le contenu de la page distante. Vous pouvez le faire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    $http_headers = array(
        'Cookie: cookies=true; cookieLangId=fr_fr; cookieMenu=all',
        'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1'
    );
     
    $http_contexte = stream_context_create(
        array(
            'http' => array(
                'header' => implode("\r\n", $http_headers),
            )
        )
    );
    libxml_set_streams_context($http_contexte);
     
    $sxml = simplexml_load_file('http://armory.worldofwarcraft.com/item-tooltip.xml?i=33140');
    echo $sxml->itemTooltips->itemTooltip->name;
    C'est ce qu'on explique dans la FAQ : Comment lire un document XML distant en précisant des entêtes HTTP particulières ?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut
    C'est parfait, merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SimpleXML] lecture d'un fichier xml
    Par Raideman dans le forum Bibliothèques et frameworks
    Réponses: 6
    Dernier message: 12/04/2007, 18h03
  2. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13
  3. Réponses: 2
    Dernier message: 17/12/2005, 20h07
  4. Probleme de lecture d'un fichier XML
    Par chleuh dans le forum Langage
    Réponses: 8
    Dernier message: 30/08/2005, 12h04
  5. [C#] [XML] Lecture d'un fichier XML => Combobox
    Par Chad`Chiwa dans le forum Windows Forms
    Réponses: 8
    Dernier message: 09/03/2005, 08h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo