Thread XML to MySQL Umlaute Problem (2 answers)
Opened by Gast at 2007-05-21 15:51

Gast Gast
 2007-05-21 15:51
#35524 #35524
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

View full thread XML to MySQL Umlaute Problem