Thread XML to MySQL Umlaute Problem
(2 answers)
Opened by Gast at 2007-05-21 15:51
Hallo Forum,
ich habe ein einfaches Script, das mir XML Daten in einer MySQL DB ablegen soll. Das funktioniert auch einwandfrei. ABER, sobald sich in der XML Datei Umlaute befinden, werden diese nicht korrekt in der DB gespeichert. Die Angabe "encoding="ISO-8859-1" ist in der XNL Datei vorhanden. Meine Vermutung, dass XML::XPath immer mit UTF-8 arbeitet. Somit wäre also irgendwo im Script eine Umwandlung in Latin-1 notwendig...aber wo und wie? Bin ich der Einzige im WEB, der XML Daten mit Hilfe von Perl in eine MySQL Datenbank speichern möchte, oder ist mein Ansatz schon vollkommen falsch? Anbei das Script und die XML Datei: users.xml <?xml version="1.0" encoding="ISO-8859-1"?> <DBI driver="mysql:database=mydb;host=localhost"> <RESULTSET statement=" SELECT user_id, email FROM users_table"> <ROW> <user_id>ü</user_id> <email>email1</email> </ROW> <ROW> <user_id>ß</user_id> <email>email2</email> </ROW> <ROW> <user_id>ä</user_id> <email>email3</email> </ROW> </RESULTSET> </DBI> import.pl use strict; use DBI; use XML::XPath; use Unicode::String; my $dbh = DBI->connect("dbi:mysql:db205326771", "dbo205326771", "test") || die $DBI::errstr;; my $xp = XML::XPath->new(filename => 'users.xml'); # Versuch der Unicode Umwandlung # my $s = new Unicode::String($xp); # my $s = $s->latin1(); # Tabelle "users" leeren $dbh->do("DELETE FROM users WHERE user_id LIKE '%' "); my $sth = $dbh->prepare(qq{INSERT INTO users VALUES (?, ?)}); # loop through the records foreach my $row ($xp->findnodes('/DBI/RESULTSET/ROW')) { # extract from the XML my $email = $row->find('email')->string_value; my $user = $row->find('user_id')->string_value; # insert into the db (using placeholders) $sth->execute($email, $user) || die $DBI::errstr; } $dbh->disconnect; print "Success!!!\n"; Vielen Dank für einen Tipp Michael |