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 16/08/2007, 21h03   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
Par défaut [SimpleXML] simplexml_load_string() erreur

salut à tous,

je suis incompétent en php, surtout en php5, j'ai utilisé des fichiers en open source et une fois installés sur mon espace perso free voilà le type de l'erreur :

Citation:
Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1041: parser error : ParsePI: PI xml-stylesheet never end ... in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Warning: simplexml_load_string() [function.simplexml-load-string]: in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Warning: simplexml_load_string() [function.simplexml-load-string]: Entity: line 1041: parser error : Start tag expected, '<' not found in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Warning: simplexml_load_string() [function.simplexml-load-string]: in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Warning: simplexml_load_string() [function.simplexml-load-string]: ^ in /mnt/147/sda/5/7/guilde.mysticals/armory/_armory.php5 on line 93

Fatal error: Call to a member function xpath() on a non-object in /mnt/147/sda/5/7/guilde.mysticals/armory/create_sig.php5 on line 85

je vous copie/colle la fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
function getArmoryDataXML($url) {
	global $xmlDataCache;
	if(!$xmlDataCache[$url]) {
		$data = getCachedXML($url);
		if(!$data) {
			$f = "";
			if(USE_CURL) {
				$ch = curl_init();
				$timeout = 30; // set to zero for no timeout
				$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; 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);
				$f = curl_exec($ch);
				curl_close($ch);			
			} else {
				$f = file_get_contents($url);
			}
			$xml = simplexml_load_string($f);
			if($xml)
				setCachedXML($url, $f);
		} else {
			$xml = @simplexml_load_string($data);
			if(!$xml) {
				$f = file_get_contents($url);
				setCachedXML($url, $f);
				$xml = simplexml_load_string($f);
			}
		}
		$xmlDataCache[$url] = $xml;		
	}
	return $xmlDataCache[$url];
}
ça me dépasse complètement, c'est du chinois pour moi, auriez vous une idée de l'origine du mal svp ?
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2007, 23h45   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
le problème a l'air d'être dans le contenu XML
regarde ce qu'il y a dans la variable $f ou bien donne nous l'URL que tu essaie de lire
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 09h51   #3
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
petit historique :
le but de ces fichiers php est de récupérer des infos sur les pages de l'armurerie de World of Warcraft, par contre tout est en anglais donc je souhaite installer tout ceci sur mes pages persos et que cela fonctionne pour qu'enfin je puisse procéder à la traduction.

j'ai regardé dans le code et ai trouvé que cela allait chercher une url dans un fichier ini :
EU_URL=http://armory.wow-europe.com

c'est lors du passage sur la page create_sig.php5 que cela affiche les erreurs ci-dessus.
voici le debut de ce fichier :
Code :
1
2
include("_armory.php5");
$options = parseIni("sig_config.ini", true);
je me permets de vous joindre dans armory.rar les fichiers _armory.php5, create_sig.php5 et sig_config.ini

mais ne vous cassez pas la tête dessus, ce n'est pas urgent
Fichiers attachés
Type de fichier : rar armory.rar (7,6 Ko, 24 affichages)
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 10h17   #4
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
je n'ai pas trop envie d'installer tous ces fichiers sur mon ordinateur

dans la fonction "getArmoryDataXML" rajoute un "echo $url;" et donne nous l'adresse qui pose problème
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 10h23   #5
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
voilà ce que ça me donne comme url :

Code :
http://armory.wow-europe.com/character-sheet.xml?r=lifecare&n=chants+eternels
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 10h27   #6
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
hummm en fait la bonne page devrait être :

Code :
http://armory.wow-europe.com/character-sheet.xml?r=Chants+%C3%A9ternels&n=Lifecare
je viens d'inverser les champs pour que cela corresponde exactement à la meme url qui marche sur wow europe, memes erreurs
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h29   #7
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
j'ai trouvé le problème mais tu n'es pas arrivé au bout de tes peines
Ce qu'il se passe c'est que le serveur armory.wow-europe.com adapte ça réponse en fonction du navigateur. Si c'est Firefox, il envoie les données XML et ensuite Firefox fais la transformation XSL. Mais si c'est un autre navigateur, la transformation est faite sur le serveur et ensuite le résultat est envoyé sous forme de code HTML

Là dans ton code PHP, il est très probable que l'extension CURL n'est pas installé et donc le script n'arrive pas à se faire passer pour Firefox et donc le script reçoit le résultat sous forme de code HTML et donc la fonction "simplexml_load_string" n'arrive pas à l'analyser

Si tu tiens vraiment faire fonctionner tout ça, il faudra que tu modifies la fonction "getArmoryDataXML" en remplaçant l'appel à "file_get_contents" par l'appel direct d'une requête HTTP envoyée avec la fonction http://php.net/fsockopen
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h32   #8
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
j'ai fait quelques tests.

j'ai crée un fichier simple :

Code :
1
2
3
4
5
6
7
8
9
<?
 
$url = "http://armory.wow-europe.com/character-sheet.xml?r=Chants+%C3%A9ternels&n=Lifecare";
$html = file_get_contents($url);
 
$xml = simplexml_load_string($html);
 
echo "xml : ".$xml;
?>
il y a tout de suite des erreurs
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h33   #9
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
oki merci du tyau ^^

je vais voir ce que je peux faire
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h42   #10
Invité de passage
 
Inscription : août 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 2
Points : 2
Points : 2
oui mais alors ça devrait marcher sous FF non ?
or ce n'est pas le cas ici.
ou alors je n'ai pas compris ton explication
CyberZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h44   #11
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
pour CURL j'ai trouvé cette ligne en tout début de fichier _armory.php5:

Code :
define("USE_CURL", false);
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h48   #12
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
j'ai mis true et ya plus d'erreur ^^
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h50   #13
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
Citation:
Envoyé par CyberZ
oui mais alors ça devrait marcher sous FF non ?
or ce n'est pas le cas ici.
ou alors je n'ai pas compris ton explication
oui quand Firefox appelle la page directement, le serveur renvoie du XML (regarde la source de la page)
mais quand on demande la page dans PHP, le serveur renvoie de l'HTML


Citation:
Envoyé par geraldh713
pour CURL j'ai trouvé cette ligne en tout début de fichier _armory.php5:

Code :
define("USE_CURL", false);
forcement, ça ne peut pas fonctionner comme ça
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2007, 11h54   #14
Invité de passage
 
Inscription : septembre 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 22
Points : 3
Points : 3
mais mdr ^^

maintenant je dois voir pourquoi ça ne créé pas les images ^^

en tout plus d'affichage d'erreur, donc je mets resolu.

merci bien
geraldh713 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 14h05   #15
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
Bonjour,

Je remonte ce sujet car ma question est en rapport : je cherche également à récupérer un fichier xml depuis l'armurerie de wow mais je reçois les informations en anglais (en_us), bien qu'indiquant un navigateur en français avec :
Code :
1
2
$useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
curl_setopt ($ch, CURLOPT_USERAGENT, $useragent);
J'ai également testé "fr", "fr-fr"... Mais rien n'y fait, c'est toujours de l'anglais.

Quelqu'un aurait une solution ?
Palca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 14h13   #16
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
Ne serait-ce pas plutôt sur l'entête HTTP_ACCEPT_LANGUAGE qu'il faut jouer ? A renseigner par l'intermédiaire de l'option CURLOPT_HTTPHEADER (valeurs sous la forme d'un tableau numériquement indexé).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 14h35   #17
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
Je viens de tester
Code :
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('HTTP_ACCEPT_LANGUAGE' => "fr"));
mais ça ne fonctionne pas, c'est la bonne syntaxe ?
Palca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 15h39   #18
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
Un tableau numériquement indexé implique une forme comme celle ci-dessous :
Code :
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('ACCEPT_LANGUAGE: fr'));
Si elle n'est pas respectée, je doute que les entêtes soient ensuite correctes (du point de vue du protocole HTTP).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 20h57   #19
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
Même résultat

Mon code est le suivant :
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_HTTPHEADER, array('HTTP_ACCEPT_LANGUAGE: fr'));
$f = curl_exec($ch);
curl_close($ch);
Il n'y aurait pas autre chose qui pourrait faire malfonctionner le script ? (c'est la première fois que j'utilise curl, j'ai juste récupéré ce code).
Palca est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2008, 22h52   #20
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
Essayez plutôt :
Code :
curl_setopt ($ch, CURLOPT_HTTPHEADER, array('ACCEPT_LANGUAGE: fr'));
Puisque cURL préfixe toutes les entêtes de HTTP_.
julp 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 13h59.


 
 
 
 
Partenaires

Hébergement Web