GNT sans publicité, site mobile, fonctionnalitées exclusives...

XML Simple et les deux points

Le
Ericus
Salut
j'ai écrit un script pour extraire des données du fichier XML de gnucash
(pour tracer des courbes de court d'actions).
j'ai utilisé XML::Simple pour lire le fichier.

çà marchait très bien depuis plusieurs années et depuis quelques temps
(probablement au passage de la mandraque 10.0 à 10.1) çà ne fonctionne plus
et j'ai l'erreur suivante :

"Undeclared prefix: cd at
/usr/lib/perl5/vendor_perl/5.8.1/XML/NamespaceSupport.pm line 293."

J'ai cherché un peu et j'ai vu que le ":" posait quelques problèmes :
le script qui suit génère bien le fichier xml mais plante à la lecture :
#!/usr/bin/perl
use XML::Simple;
use Data::Dumper;

$xml = new XML::Simple;
$data{'toto:titi'}='toto';
$ref = \%data;
$xml->XMLout($ref, outputfile => 'test.xml');
$data = $xml->XMLin("test.xml");
print Dumper($data);

si je suprime le ":" entre toto et titi, il n'y a pas d'erreur.

j'ai regardé dans la doc et c'est indiqué qu'on peut utiliser les ":" sans
problème si on utilise XML::SAX ce qui semble être mon cas.

L'impression que j'ai est que le ":" est interprété comme un séparateur

maintenant je suis un peu sec .

merci de votre aide
Eric
--
Apprendre a mourir ! Et pourquoi donc ?
On y réussit très bien la première fois !
Chamfort
Lire les 7 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #83029
À (at) Sun, 16 Jan 2005 22:16:32 +0100,
Ericus
j'ai regardé dans la doc et c'est indiqué qu'on peut utiliser les ":" sans
problème si on utilise XML::SAX ce qui semble être mon cas.


"... ce qui semble être [votre] cas." ?

Pour en être sûr, ajoutez la ligne suivante dans votre script :

use XML::SAX;

Si il accepte de se compiler alors, oui, XML::Simple peut utiliser XML::SAX.

Votre exemple de code fonctionne très bien ici.

--
Paul Gaborit - Perl en français -
Ericus
Le #83025
bonjour


"... ce qui semble être [votre] cas." ?

Pour en être sûr, ajoutez la ligne suivante dans votre script :

use XML::SAX;

Si il accepte de se compiler alors, oui, XML::Simple peut utiliser
XML::SAX.


j'ai déjà testé cette ligne et j'ai même désinstallé XML::Parser pour être
sûr du coup. c'est ok
c'est vrai que j'aurais du être plus afirmatif mais ...
avec l'expérience .... je me montre prudent dans mes afirmations
;-)


Votre exemple de code fonctionne très bien ici.

aie !


comment avez vous installé XML::Simple et XML::SAX ?

j'utilise des packetages rpm qui font partie de la distrib Mandrake 10.1

ma version XML:SAX : 0.12 ( bizarre non ?)
ma version XML: Simple : 2.12

est-ce qu'il y a des options de compilations ou un paramètrage qui pourrait
donner ce fonctionnement particulier ?

à+
Eric
--
Selon la loi n°91.32 : Fumer nuit gravement à la santé.

Paul Gaborit
Le #83024
À (at) Mon, 17 Jan 2005 19:56:38 +0100,
Ericus
comment avez vous installé XML::Simple et XML::SAX ?


Via CPAN comme d'habitude...

j'utilise des packetages rpm qui font partie de la distrib Mandrake 10.1

ma version XML:SAX : 0.12 ( bizarre non ?)
ma version XML: Simple : 2.12


Ok pour XML::SAX (le dernière version est bien la 0.12). Ma version de
XML::Simple est la 2.13 mais je ne pense pas que ça joue.

est-ce qu'il y a des options de compilations ou un paramètrage qui pourrait
donner ce fonctionnement particulier ?


Ça ne peut pas être les options de compilation ni de paramètrage... Par
contre, ce petit extrait de la documentation de XML::Simple donne peut-être
une piste :

«... To generate documents with namespaces, XML::NamespaceSupport is
required. ... »

Est-ce que XML::NamespaceSupport est installé chez vous ?

--
Paul Gaborit - Perl en français -
Ericus
Le #83022
bonjour


Ça ne peut pas être les options de compilation ni de paramètrage... Par
contre, ce petit extrait de la documentation de XML::Simple donne
peut-être une piste :

«... To generate documents with namespaces, XML::NamespaceSupport
is required. ... »

Est-ce que XML::NamespaceSupport est installé chez vous ?

oui, d'ailleurs c'est lui qui renvoie l'erreur :


"Undeclared prefix: cd
at /usr/lib/perl5/vendor_perl/5.8.1/XML/NamespaceSupport.pm line 293."

j'ai regardé dans NamespaceSupport.pm, voilà la fonction qui renvoie
l'erreur :

sub _get_ns_details {
my $self = shift;
my $qname = shift;
my $aflag = shift;
my ($ns, $prefix, $lname);
(my ($tmp_prefix, $tmp_lname) = split /:/, $qname, 3)
< 3 or die "Invalid QName: $qname";
# no prefix
my $cur_map = $self->[NSMAP]->[-1];
if (not defined($tmp_lname)) {
$prefix = undef;
$lname = $qname;
# attr don't have a default namespace
$ns = ($aflag) ? undef : $cur_map->[DEFAULT];
}
# prefix
else {
if (exists $cur_map->[PREFIX_MAP]->{$tmp_prefix}) {
$prefix = $tmp_prefix;
$lname = $tmp_lname;
$ns = $cur_map->[PREFIX_MAP]->{$prefix}
}
else { # no ns -> lname == name, all rest undef
die "Undeclared prefix: $tmp_prefix"; ==>> cette ligne génère
l'erreur
}
}

return ($ns, $prefix, $lname);
}

je vois au début qu'il fait un split avec un séparateur ":"
mais j'ai du mal à comprendre la programmation objet ....
j'ai regardé la documentation de XML:NamespaceSupport et je n'ai rien vu de
particulier ...

à+
Eric
--
Deux coqs vivaient en paix ; une poule survint...
Jean de La Fontaine

Paul Gaborit
Le #82777
À (at) Tue, 18 Jan 2005 21:32:06 +0100,
Ericus
oui, d'ailleurs c'est lui qui renvoie l'erreur :

"Undeclared prefix: cd
at /usr/lib/perl5/vendor_perl/5.8.1/XML/NamespaceSupport.pm line 293."


Ce message ne provient pas de l'exécution de l'exemple que vous nous avez
posté... ou alors d'où vient le "cd" ?

Le problème ne viendrait-il tout simplement pas du fait que votre fichier XML
généré utilise un namespace non déclaré ?


--
Paul Gaborit - Perl en français -
Publicité
Suivre les réponses
Poster une réponse
Anonyme