Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > SimpleXML
SimpleXML Forum d'entraide pour l'extension SimpleXML, qui permet de manipuler des documents XML en PHP (approche DOM).
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2008, 21h09   #1
Membre confirmé
 
Inscription : décembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : décembre 2005
Messages : 265
Points : 232
Points : 232
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 :
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 :
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 :
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 :
Citation:
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.
Palca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 14h06   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
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 :
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 ?
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2008, 15h26   #3
Membre confirmé
 
Inscription : décembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : décembre 2005
Messages : 265
Points : 232
Points : 232
C'est parfait, merci
Palca est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web