Hallo Thomas,
ich würde XML nicht selber parsen. Wie verhält sich dein Script, wenn UTF-8 oder UTF-16 als Zeichensatz verwendet wird? Außerdem könnten Zeichen mittels Entities codiert sein. Vorschlag: Ein Script, das einen SAX-Parser verwendet.
Es wird UTF-8 verwendet. Prinzipiell hast du auch recht, aber: Da die XMLs nur intern ausgetauscht werden, weiss ich ziemlich genau, was da generiert wird. Dazu kommt, dass alle XMLs vorher gegen ein detailliertes Schema validiert werden. Somit kann ich ziemlich sicher sein, was ich hier bearbeite. Meine anfängliche Begeisterung für einen Parser wich dann schnell der Erkenntis, das für viele Aufgaben der Parser einfach oversized ist. Konkret betreibe ich hier XML-Preprocessing. Verschiedene XMLs müssen nach bestimmten Kriterien gesplittet oder ergänzt werden. Schneller als mit Perl-Regex ist das wirklich nicht zu machen.
Die Applikation selber ist OO und das Bearbeiten der XMLS wird in zahlreichen Methoden vorgenommen. Dann immer den Parser und die XML-Bäume mit zu übergeben .... hmm ... keine Lust ;-) So übergebe ich 2 Strings und die werden schrittweise zurecht-ge-reg-ext. Funktioniert eigentlich prima und recht fix. So sieht es momentan im Live-Betrieb aus:
forach my $shop (1..5) { ... my $all; if( $newartikel =~ /(<Katalog .*>.*</Katalog>)/s ){# mehrzeilig $all = $1; # merken }else{ next; }
my $pattern = "<Katalog Shopid="$shop">.*?</Katalog>"; # ? -> nicht so gierig if($newartikel =~ /($pattern)/){ my $hit = $1; $newartikel =~ s/$all/$hit/; # gesamten Katalogbereich durch Shopspez. ersetzen }else{ next; } .... }
Einfacher bekomme ich es mit einem XML-Parser auch nicht hin.
Was anderes: ich suche noch einen Erfahrungsaustausch mit jemanden der sich mit SOAP::Lite ein wenig auskennt. Ich kenne nur die soaplite-Gruppe auf yahoo. Da bin ich aber rausgeflogen, weil unsere Firmenmailserver komische Dinge macht....
Mit freundlichen Grüßen
Jens Puruckherr