[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