Thread XML::Simple - Escaping (5 answers)
Opened by Andre at 2010-08-20 12:08

Gast Andre
 2010-08-20 12:08
#140790 #140790
Hallo Leute,

ich habe XML::Simple verwendet, um einige XML-Alarmkataloge einzulesen. Diese XML-Dateien enthalten ein Tag namens "RegExMapping", das in seinen Strings auch diverse Shortcuts für Charakterklassen wie z.B. "\w" enthält.

Wenn ich mir die erzeugte Datenstruktur mit dem Data::Dumper ausgeben lasse, sehe ich, dass XMLin alle Escapesequenzen zusätzlich geschützt hat, d.h. aus dem obigen Shortcut wird nun "\\w".

Code: (dl )
1
2
3
4
5
for my $file (@files)
{
my $XML = XMLin($xmldir.'/'.$file, ForceArray => 1);
push(@EVENTS,$XML);
}


Ich habe im CPAN zum Modul XML::Simple leider keine Option gefunden, die das Escaping für XMLin deaktiviert. Ist Euch eine Möglichkeit bekannt, um diese Escaping zu unterbinden?

Das Problem ist, wenn ich die RegEx später verwenden möchte, matchen diese wegen des doppelten Backslash natürlich nicht. Weil ich keine Lösung für das XMLin-Problem gefunden habe, wollte ich die doppelten Backslashes durch einfache ersetzen:

Code: (dl )
1
2
3
my $regex = $EVENTS[$A]{Alarm}[$B]{RegExpMapping}[0];
$regex =~ s/\\\\/\\/g;
$EVENTS[$A]{Alarm}[$B]{RegExpMapping}[0] = $regex;


Leider sind damit alle Backslashes verschwunden. Ich habe danach alle möglichen Kombinationen ausprobiert, keine hat funktioniert. Nun bin ich mit meinem Latein am Ende :-(

Wie muss ich die Substitution richtig definieren?

Mfg, Andre!
Last edited: 2010-08-20 12:19:27 +0200 (CEST)

View full thread XML::Simple - Escaping