XML in Mysql
Gerch2003
- xml
Hi Leute, folgedes Anliegen.
Ich habe ein Kundenprogramm in welches ich verschiedenste Daten eintragen kann. Nun ist es möglich eine XML-Ausgabe zu erstellen.
Genau dies möchte ich auch tun, allerdings soll es von der XML-Ausgabe in eine MySql-Datenbank übergehn.
Ich weis bzw. hab gelesen dass es wohl relativ einfach funktionieren soll, finde allerdings keine richtige Doku dazu.
PHP und MySql sind kein Problem.
Hat jemand ne Ahnung wie ich das angehen kann, oder weis ein nettes Tutorial dazu?
Interessant wäre auch noch ob es irgendetwas Besonderes gibt nachdem ich suchen kann, weil bei "xml to sql tutorial" findet man nicht so viel schönes.
Gruß
Hi!
Genau dies möchte ich auch tun, allerdings soll es von der XML-Ausgabe in eine MySql-Datenbank übergehn.
Ich weis bzw. hab gelesen dass es wohl relativ einfach funktionieren soll, finde allerdings keine richtige Doku dazu.
Wer das geschrieben hat, hatte vermutlich keine Ahnung, wie komplex man XML-Dokumente erstellen kann. Wenn es darum geht, die Struktur im XML in eine Struktur des DBMS umzuwandeln, so kann das in der Tat einfach sein, aber auch sehr komplex ausfallen, je nachdem, welche XML-Features du verwendest und wie verschachtelt die Daten vorliegen.
Lo!
Wer das geschrieben hat, hatte vermutlich keine Ahnung, wie komplex man XML-Dokumente erstellen kann. Wenn es darum geht, die Struktur im XML in eine Struktur des DBMS umzuwandeln, so kann das in der Tat einfach sein, aber auch sehr komplex ausfallen, je nachdem, welche XML-Features du verwendest und wie verschachtelt die Daten vorliegen.
Hi,
was meinst du genau mit der Komplexität?
Die XML-Datei kann ich anpassen wie ich will.
Es handelt sich aber im Grunde um eine Struktur wie:
Anrede: Herr
Vorname: Max
Nachname: Mustermann
Was sich dann ja beliebig oft wiederholen lässt.
Hi!
was meinst du genau mit der Komplexität?
Man kann ja schachteln bis zum Umfallen, Attribute und Namespaces verwenden. All das erhöht die Komplexität.
Es handelt sich aber im Grunde um eine Struktur wie:
Anrede: Herr
Vorname: Max
Nachname: Mustermann
Das ist in der Tat einfach. Wo genau hast du nun beim Umsetzen Bauchschmerzen?
Lo!
Hi,
ich hab deswegen Bauchschmerzen, da ich nicht weis wo ich anfangen soll.
Wie schon gesagt, habe kein Tutorial gefunden was sich genau mit dem Thema beschäftigt. Habe bis jetzt immer nur so halbe Ansätze gefunden.
Mittlerweile bin ich soweit, dass ich die Attribute mit PHP aus dem XML-File auslese und dann über Variablen in die Datenbank schreibe.
Das auslesen funktioniert schon wunderbar und die Daten dann über Variablen in die Datenbank zu schreiben ist ja kein Problem mehr. Hatte nur keine Lust mehr.
Ist zwar etwas mehr schreibaufwand, sollte aber funktionieren.
Hi!
Mittlerweile bin ich soweit, dass ich die Attribute mit PHP aus dem XML-File auslese und dann über Variablen in die Datenbank schreibe.
Genauso kann man das machen. Teil 1: SimpleXML-Beispiel anschauen, nachbauen, ändern auf eigene Bedürfnisse, prüfen, dass die gewünschten Werte aus dem XML gezogen werden und dass diese im Rohformat vorliegen (besonders bei den XML-Sonderzeichen <>&'" und NCRs). Teil 2: MySQL-Handling zunächst mit Dummy-Daten aufsetzen, am besten anschauen, wie es mit Prepared Statements funktioniert, denn bei massenhaftem Ausführen des selben Statements bringt das Vorteile. Teil 3: Beides verbinden, und testen.
Lo!
Mein fertiger Code sieht jetzt so aus.
Weis nicht obs die beste Lösung ist, aber er funktioniert prächtig ;-)
Kurz zur Erklärung:
Das PHP-Script liest alle xml-Dateien aus dem Verzeichnis aus und speichert die XML-Attribute nacheinander in ein Array mit der Variable $inhalt[0], $inhalt[1]
usw. (wichtig ist hierbei, dass ein Array bei 0 anfängt zu zählen.
Als letztes werden die Variablen mit den Inhalten in eine Mysql-Tabelle geschrieben.
Das alles geschieht nacheinander, sodass man für jedes XML-File eine einzelne Zeile bekommt.
WICHTIG: Das script funktioniert nur, wenn die XML-Files alle die selbe Struktur aufweisen!
WICHTIG: Das script muss sich außerdem im selben Verzeichnis wie die XML-Files befinden!
<?php
$SQL_Server = "localhost";
$SQL_User = "root";
$SQL_Pword = "1234";
$SQL_DB = "test";
mysql_connect($SQL_Server, $SQL_User, $SQL_Pword);
mysql_select_db($SQL_DB);
foreach (glob("*.xml") as $filename) {
if(file_exists($filename)) {
$xml = simplexml_load_file($filename); //Lädt die XML-Dateien ein
$inhalt = array("$xml->Text1", "$xml->Text2", "$xml->Text3"); } // $xml->Text1 bezieht sich auf das Attribut Text1 des XML-Files und muss angepasst werden.
mysql_query("INSERT INTO formular (Text1,Text2,Text3) VALUES ('".$inhalt[0]."','".$inhalt[1]."','".$inhalt[2]."')");
// (Text1,Text2,Text3) stellt die einzelnen Spalten in der Mysql-Tabelle dar und muss entsprechend angepasst werden.
//Je nach Menge und Inhalt des XML-Files muss alles natürlich angepasst werden.
}
?>
Nun noch die XML-Files, welche alle so aufgebaut sind.
<?xml version="1.0" encoding="utf-8"?>
<user>
<Text1>Text1</Text1>
<Text2>Text2</Text2>
<Text3>Text3</Text3>
</user>
Die Struktur der Mysql-Tabelle ist wie folgt aufgebaut und muss natürlich auch angepasst werden:
CREATE TABLE IF NOT EXISTS `formular` (
`ID` int(11) NOT NULL auto_increment,
`Text1` varchar(100) collate latin1_general_ci NOT NULL,
`Text2` varchar(100) collate latin1_general_ci NOT NULL,
`Text3` varchar(100) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=13 ;
Was hierzu noch zu sagen ist, die ID wird nicht aus dem XML-File gelesen, sondern erhöht sich automatisch um 1 pro Zeile. Dies geschieht allerdings automatisch in der Mysql-Tabelle
So ich denke ich konnte es gut veranschaulichen und hoffe dass das Script auch bei euch funktioniert :-)
PS: dedlfix, danke für deinen Gedankenanstoß
Gruß