Problème de symbole dans la bilbiothèque XML::Simple

Problème de symbole dans la bilbiothèque XML::Simple - Perl - Programmation

Marsh Posté le 18-05-2006 à 08:52:15    

Bonjour,
voilà, je parse un fichier qui est de telle façon :
 
<filtre>
 <elementun attribut="attribut1" op="<" valeur="999" />
</filtre>
 
Là, il me génère une erreur quand je veux lancer mon fichier.
Par contre si je modifie mon fichier et que je mets ça :
<filtre>
 <elementun attribut="attribut1" op=">" valeur="999" />
</filtre>
 
Là ça marche.
Y aurait il une option? Ou est ce vraiment interdit de mettre le symbole "<"? Merci.

Reply

Marsh Posté le 18-05-2006 à 08:52:15   

Reply

Marsh Posté le 18-05-2006 à 09:27:17    

c'est interdit.
il faut le remplacer par &lt;
 
tu trouvera plusieurs fonction d'achappement pour XML un peu partout sur cpan.
La regle est de remplacer & par &amp; (en premier), puis < par &lt;
 
puis si c'est un attribut entre double quote, remplacer " par &quot; (ou ' par &apos; si tu est en simple quote)

Reply

Marsh Posté le 18-05-2006 à 09:36:07    

D'accord, merci,
en fait le truc c'est que c'est l'utilisateur qui écrit ce genre de fichier xml. Donc lui il peut mettre "<"...
Ce que j'avais pensé c'est de modifier le nom de mon fichier, au lieu de .xml, mettre .txt, puis l'ouvrir et modifier le caractère. Seulement le "rename" ne marche pas.
N'auriez vous pas une solution de secours, pour que cette modification soit modifiée automatiquement?

Reply

Marsh Posté le 18-05-2006 à 09:38:26    

l'ouvrire à la main dans un editeur tu veux dire?

Reply

Marsh Posté le 18-05-2006 à 09:56:06    

Non, genre faire un :
rename...
open...
close...
rename...
 
Mais ça n'a pas l'air de marcher...

Reply

Marsh Posté le 18-05-2006 à 10:32:25    

Bon je touche au but...
Pour afficher mon fichier je fais un open :
<filtre>
 <elementun attribut="attribut1" op=">" valeur="999" />
</filtre>  
 
 
Seulement il n'y a pas d'erreur, mais je n'afifche aucune ligne...
Par contre si je modifie mon fichier XML comme ceci :
aaa<filtre>
 <elementun attribut="attribut1" op=">" valeur="999" />
</filtre>
 
Il m'affiche aaa pour la ligne... Donc il ne prend en compte ce qu'il y a dans les balises, y a til un moyen de contourner ce problème? Merci.

Reply

Marsh Posté le 18-05-2006 à 10:44:41    

je ne comprend pas trop ce que tu veux faire?
ton open c'estun open perl? ou un open d'une librairie XML ?
Ton fichier XML n'est pas valide en tant que XML, mais rien ne t'empeche de l'ouvrire avec une editeur (non XML) ou un script perl et de le retroucher sans avoir besoin de le renommer.
Par contre je te previent que repearer dans un script ce genre d'erreur par des bidouilles genre regexp est plus que risqué!
Tu ne pourrais pas t'arranger en amont pour que les utilisateur passent par un formulaire (et donc un script) pour remplir le XML?

Reply

Marsh Posté le 18-05-2006 à 10:48:58    

En fait, ce sont les utilisateurs qui font le fichier XML, or eux ils ont besoin de faire avec des symboles "<". Donc, de mon côté, je récupère le fichier, or ce symbole est mal interprété par XML::Simple.
Donc je voulais faire un :
open (FIC, $fichier) or die "ne trouve pas fav";
 
Puis regarder ce que le fichier contient, or il ne m'affiche rien du tout, je voulais qu'il m'affiche le contenu de mon fichier XML, c'est à dire les balises. Comme ça j'aurais pu modifier le fichier dans un script, et l'utilisateur aurait rien à faire. Tout serait automatique.

Reply

Marsh Posté le 18-05-2006 à 14:02:05    

Le XML n'est pas fait pour els utilisateurs! C'est fait pour les machines!
Faire faire du XML directement à des gens (surtout non informaticiens) c'est un connerie!
Ou alors il faut au moins qu'ils utilisent un editeur XML genre XML spy.
 
Pour l'ouvrire avec perl tu ne devrait normalement pas avoir de probleme, je ne vois pas ce qui peut merder. montre ton code.
Mais de toutes facon ca ne change pas grand chose: si tu veux le modifier dans ton script tu cours à la catastrophe! (regexps foireuses et bidouillage...), et apres ca sera de ta faute! Alors exige des fichiers valides en entrée!


Message édité par pospos le 18-05-2006 à 14:03:02
Reply

Marsh Posté le 19-05-2006 à 09:08:28    

Oui, mais bon en même temps ce sont des exigences le XML. Les gens qui le feraient sont quand même informaticiens.
 
Mais bon, j'ai réussi à faire comme je voulais, c'est à dire modifier directement dans le fichier. Mais bon, après une discution avec le supérieur, il va y avoi modification dans les fichiers XML pour enlever le "<".
 
Merci de ton aide.

Reply

Marsh Posté le 19-05-2006 à 09:08:28   

Reply

Marsh Posté le 26-05-2006 à 11:31:17    

c'est du parsing à la libXML et pas XML::Simple, mais je le note ici pour reference:
http://search.cpan.org/~miyagawa/XML-Liberal/


Message édité par pospos le 26-05-2006 à 11:36:26
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed