Problème simplexml_load_file

Petit nouveau ! | 6 Messages

12 janv. 2010, 15:34

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 ?

ViPHP
ViPHP | 5462 Messages

12 janv. 2010, 18:02

tu peux utiliser libxml_use_internal_errors
http://www.php.net/manual/fr/function.l ... errors.php

Petit nouveau ! | 6 Messages

12 janv. 2010, 18:10

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)

Mammouth du PHP | 2937 Messages

12 janv. 2010, 21:58

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.

Petit nouveau ! | 6 Messages

13 janv. 2010, 12:48

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.

Mammouth du PHP | 672 Messages

13 janv. 2010, 12:56

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)...

Petit nouveau ! | 6 Messages

13 janv. 2010, 18:29

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

Petit nouveau ! | 6 Messages

18 janv. 2010, 11:47

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 ?

Mammouth du PHP | 2937 Messages

18 janv. 2010, 12:09

N'y à t-il aucune solution pour passer outre ?
Mis à part corriger l'espace de nom, je n'en vois pas.

Petit nouveau ! | 6 Messages

18 janv. 2010, 13:08

arf mais je peux pas le corriger, je ne peux que le prendre tel quel :?

ViPHP
ViPHP | 2287 Messages

08 févr. 2010, 18:17

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...).
if(!@work()){ Nespresso(); } else { what(); }
______________________________