Page 1 sur 1

Problème simplexml_load_file

Posté : 12 janv. 2010, 15:34
par hargan
Bonjour,

Je doit lire en masse des fichiers xml qui ont l'air d'avoir un en-tete incorrect.

Code : Tout sélectionner

<prod xmlns="prod" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="prod http://xxxx.xxxxx.fr/prod/dtd/XmlProd.xsd">
J'ai utiliser la fonction simplexml_load_file et j'avais tester il y a quelques jours XMLReader(); qui me renvoyais exactement le même problème.

Quand je supprime : xmlns="prod", tout va bien.
Mais si je le laisse (et je n'est pas le choix je doit le laisser) php me renvois cette erreur :
Warning: simplexml_load_file() [function.simplexml-load-file]: 5439120_PRO.xml:4: namespace warning : xmlns: URI prod is not absolute in XResolution.php on line 17
Y à t-il un moyen de les empêcher de bloquer la dessus ?

Re: Problème simplexml_load_file

Posté : 12 janv. 2010, 18:02
par stealth35
tu peux utiliser libxml_use_internal_errors
http://www.php.net/manual/fr/function.l ... errors.php

Re: Problème simplexml_load_file

Posté : 12 janv. 2010, 18:10
par hargan
merci pour ta réponse stealth35.

J'ai testé libxml_use_internal_errors, et en fait je n'avais pas coller tout l'ensemble de l'erreur (trop long).
Il ne reste maintenant plus que celle ci :
Warning: XMLReader::read() [xmlreader.read]: An Error Occured while reading in C:\Program Files\EasyPHP5.2.10\www\OutilsBNF\Correction_XResolution.php on line 33
Et le fichier xml n'est finalement pas parcouru.
Donc ca me revient simplement à effacer les erreur, mais mon script ne fonctionne pas plus.

(ps:pour rassurer j'ai tester avec un autre fichier xml qui contient un en-tête valide, et celui ci fonctionne tres bien)

Re: Problème simplexml_load_file

Posté : 12 janv. 2010, 21:58
par Victor BRITO
La valeur de l'attribut xmlns n'est pas valide : un espace de nom XML doit avoir la forme d'une URL ou d'un URI.

Re: Problème simplexml_load_file

Posté : 13 janv. 2010, 12:48
par hargan
C'est justement la mon problème.

Comme expliquer plus haut, l'en-tête je ne sais pour quelle raison n'est pas valide. Hors je ne peux pas me permettre de changer l'en-tête sur des fichier qui traverse une chaine de plusieurs entreprises.

Alors j'aimerai savoir si il est quand même possible de passer outre cette erreur ? car pour le moment, mon script s'arrête la dessus et ne veux pas aller plus loin.

Re: Problème simplexml_load_file

Posté : 13 janv. 2010, 12:56
par macgawel
Si c'est juste de la lecture que tu veux faire, tu peux toujours copier les fichiers XML et supprimer xmlns="prod" (avec un strtr ou un preg_replace)...

Re: Problème simplexml_load_file

Posté : 13 janv. 2010, 18:29
par hargan
Pourquoi pas!!!

C'est une solution un peu brutal mais qui fonctionne...

Mais je risque d'avoir l'écriture à appliquer aussi, hors si je supprime le morceau qui me dérange, ca risque de foutre le bazar dans le reste de la chaîne. Je vais me renseigner sur l'utilité de xmlns="prod".

Merci macgawel

Re: Problème simplexml_load_file

Posté : 18 janv. 2010, 11:47
par hargan
bonjour,

alors je ne peux pas me débarrasser de ce 'prod'. J'ai tester je crois quasiment touts les différents procédé de manipulation xml en php, et tous me renvoyent cette même erreur. Ce que je ne comprend pas c'est que le xml n'est pas faut au niveau syntaxe. Il sagit juste d'un mot qui aurai du être une URI. N'y à t-il aucune solution pour passer outre ?

Re: Problème simplexml_load_file

Posté : 18 janv. 2010, 12:09
par Victor BRITO
N'y à t-il aucune solution pour passer outre ?
Mis à part corriger l'espace de nom, je n'en vois pas.

Re: Problème simplexml_load_file

Posté : 18 janv. 2010, 13:08
par hargan
arf mais je peux pas le corriger, je ne peux que le prendre tel quel :?

Re: Problème simplexml_load_file

Posté : 08 févr. 2010, 18:17
par Calimero
dans le pire des cas, tu supprimes la partie qui fâche (pour pouvoir lire) et tu la remets après (pour diffuser le fichier).

En un mot sois créatif ;) (en imaginant que tu n'aies toujours pas résolu le souci, un mois après, je viens de voir la date...).