Wer mit Content-Managment-Systemen oder Onlineshopsystemen wie beispielsweise Oxid eShop arbeitet, und eine große Datenmenge von einer XML-Datei in eine SQL-Datenbank schleusen muss, steht oft vor einem Problem. Neben “XML-Importer-Plugins” und Snippets, die mal mehr und mal weniger gut funktionieren gibt es kaum Anleitungen zu diesem Thema.
Daher möchte ich in diesem Beitrag zeigen wie Sie Ihre Daten aus der einer XML-Datei mithilfe von PHP in Ihre SQL-Datenbank übertragen.
Anleitung: PHP > XML nach SQL Importer
(Ein gewisses Grundverständnis vorausgesetzt.)
Als erstes erstellen wir die Verbindung zur Datenbank. Die Felder “servername”, “username”, “passwort” und “datenbankname” werden natürlich mit den Daten eurer Datenbank gefüllt.
// DB
$server = "servername";
$user = "username";
$pass = "passwort";
$dbname = "datenbankname";
// Verbindung aufbauen
$conn = new mysqli($server, $user, $pass, $dbname);
// Verbindung überprüfen
if ($conn->connect_error) {
die("Fehler: " . $conn->connect_error);
}
Nachdem wir nun die Datenbankverbindung erfolgreich hergestellt haben nutzen wir die PHP-Funktion “simplexml_load_file” um unser XML-Dokument, dass wir in die Datenbank übertragen möchten, in ein Objekt umzuwandeln.
Ersetzen Sie “meineliste.xml” durch den Pfad zu Ihrer XML-Datei.
// XML-Daten holen
$xml = simplexml_load_file("meineliste.xml") or die
("Fehler: XML-Dokument konnte nicht geladen werden!");
Zum Verständnis einmal eine simple XML-Datei. Die Struktur Ihrer XML-Datei sieht natürlich anders aus. Als nächste beschäftigen wir uns damit, wie Sie die Daten aus Ihrer XML-Datei auslesen. Anschließend schreiben Sie diese die jeweilige Spalte Ihrer Datenbank.
<?xml version="1.0"?>
<catalog>
<book>
<id>1</id>
<title>iBlogg</title>
<price>44.95</price>
</book>
<book>
<id>2</id>
<title>Internet, Tech & More</title>
<price>5.95</price>
</book>
</catalog>
In dem folgenden Beispiel gehe ich davon aus, dass die Spalten der Datenbank (meinetabelle) folgende Namen haben: “ID”, “Titel” und “Preis”. Wir nutzen eine “foreach-Schleife” um für jedes Buch die Daten in die richtige Spalte der Daten zu schreiben.
// Schleifenbeginn und definieren der Werte
foreach($xml->book as $book) {
$id = $book->id;
$titel = $book->title;
$preis = $book->price;
// Datensätze aktualisieren
$sql = "INSERT INTO meinetabelle (ID,Titel,Preis) VALUES ('$id','$titel','$preis');";
mysqli_query($conn,$sql) or die("Fehler!");
// Ende der Schleife
}
// Verbindung trennen
$conn->close();
Wenn Sie diese Datei nun auf Ihren Server laden und ausführen werden alle Daten von dem XML-Dokument in Ihre Datenbank übertragen.
Dieser Code ist nun natürlich beliebig erweiterbar. Sie könnten nun beispielsweise auch innerhalb der Schleife, den Titel jedes übertragenen Buches ausgeben. Oder die übertragenen Datensätze zählen.
Wenn Ihnen dieses HowTo von iblogg geholfen hat oder Sie Anregungen haben würde ich mich über einen Kommentar oder einen “like” natürlich freuen.