[Vienna-pm] XML::Simple Problem
Peter J. Holzer
hjp-vienna-pm-list at hjp.at
Fri Jun 22 07:56:43 PDT 2007
On 2007-06-22 14:33:16 +0200, nagy wrote:
> darf ich euch wieder um ein bisschen LINUX/Perl nachhilfe bitten:
>
> perl 5.8.8: Installiert wurde
>
> perl -MCPAN -e 'install XML::Simple'
Keine gute Idee. XML::Simple ist nur ein Frontend, das das, was der
Parser liefert, in hübsche einfache Hashes und Arrays umwandelt. Man
sollte vorher[1] einen brauchbaren XML-Parser installieren, sonst bekommt
man entweder, was gerade zufällig installiert ist oder den unsäglichen
PurePerl-Parser.
Auf Linux-Systemen würde ich zu XML::LibXML raten, weil man da da die
ganzen Abhängigkeiten meistens ohnehin schon installiert hat (oder
zumindest mit einem einfachen Aufruf von apt/up2date/yum/emerge/...
installieren kann). Wenn man selber kompilieren muss, ist wahrscheinlich
XML::Parser mit expat einfacher.
> Auf empfehlung aus dem Netz auch noch:
> XML::Encoding
Habe ich noch nie gebraucht. <sfx>Auf CPAN nachschau</sfx> Aha.
> Folgende Testroutine wurde erstellt:
> ----------------------------- 8< ---------------------
> use XML::Simple;
> my $xmlConfig = XMLin('config.xml');
> ----------------------- 8< -------------------------
>
> rufe ich dieses File auf so erscheint folgende Fehlermeldung:
> ----------------------------- 8< ---------------------
> Couldn't open encmap ascii.enc:
> Datei oder verzeichnis nicht gefunden.
> ----------------------------- 8< ---------------------
Woraus ich schließe, dass Deine XML-Files mit
<?xml version="1.0" encoding="ascii" ?>
beginnen. Muss das so sein? Erstens funktioniert "us-ascii" (so heißt
das encoding m.W. offiziell) statt "ascii" ganz wunderbar (bei mir
zumindest), und zweitens ist US-ASCII ein echtes Subset von UTF-8, so
dass die Angabe des Encodings vollkommen überflüssig ist.
Aber die Beschreibung von XML::Encoding:
| This module, which is built as a subclass of XML::Parser, provides a
| parser for encoding map files, which are XML files.
passt sowieso nicht zu den .enc-Files, die auf meinem System installiert
sind: Die Files in
/usr/local/lib/perl5/site_perl/5.8.6/i686-linux/XML/Parser/Encodings/
die der Parser tatsächlich verwendet[0], sind irgendwas Binäres, und
/usr/share/enscript/ascii.enc schaut nach PostScript aus - XML ist
beides sicher nicht.
> Ich habe es auch mit anderen encoding einträgen im XML File probiert.
Default bei XML ist immer UTF-8. Das sollte jeder XML-Parser "out of the
box" können, ohne dass man irgendwas dazuinstallieren muss.
> "ls -lZ" ergibt nichts aussergewöhnliches. (ich habe setenforce 1 laufen, setenforce 0 ergibt keine änderung)
>
> Mein Verdacht ist es, dass irgendein Pfad/Link udergl. darauf weisen muss.
@XML::Parser::Expat::Encoding_Path bei XML::Parser
hp
[0] Hängt natürlich vom Parser ab. XML::LibXML scheint encoding="ascii"
eingebaut zu haben, das sucht laut strace nach gar keinem externen
enc-File.
[1] Theoretisch auch nachher. Meistens schafft es XML::Simple bei
mehreren installierten Parsern nicht den schlechtesten zu finden,
und notfalls kann man immer noch mit der Environment-Variable
XML_SIMPLE_PREFERRED_PARSER nachhelfen.
--
_ | Peter J. Holzer | I know I'd be respectful of a pirate
|_|_) | Sysadmin WSR | with an emu on his shoulder.
| | | hjp at hjp.at |
__/ | http://www.hjp.at/ | -- Sam in "Freefall"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20070622/5da211b8/attachment.bin
More information about the Vienna-pm
mailing list