suit: XML-Datei in MySQL-Datenbank importieren

Hallo,

ich habe mehrere xml-Datein (etwa 20.000 bis 120.000 Datensätze, zwischen 10 und 50 MB groß) die täglich in eine MySQL-Datenbank eingeflegt werden sollen.

a) die Daten müssen vorher manipuliert werden können
Im Klartext heisst das: ein xml Knoten, mehrere Zielfelder/Tabellen oder mehrere Quellknoten ein Zielfeld - alternativ werden auch kleinere Berechnungen oder Stringmanipulationen durchgeführt (Ersetzungen) usw.

b) es müssen keine Updates gemacht werden, nur inserts: XML in neue Tabellen importieren, bei Erfolg alte Tabellen wegschmeissen und neu erstellte umbenennen

c) es muss als cron-job oder direkt über den Browser anstoßbar sein

d) das ganze muss halbwegs schnell und schonend laufen, der Server selbst hat relativ wenig Schmalz und die Konfiguration ist teilweise etwas eingeschränkt

PHP 5.2.x und MySQL 5.x sind vorhanden

Ich hatte noch nicht das Vergnügen derartiges zu tun - bisher habe ich nur CSV in MySQL Datenbanken importiert - die lassen sich zeilenweise lesen und schonen das Speicherlimit

leider weiss ich nicht, was es mit den unterschiedlichen xml-Parser-Funktionen auf sich hat (da gibts ja mittlerweile ein paar) - welche ist für diesen Zweck die richtige? bzw hat jemand allgemeine Tipps dazu?

danke im voraus

  1. Hallo,

    schreib dir doch einfach ein XSL(T) Dokument, welches die XML Dateien in CSV Dateien zurückverwandelt und dann kannst du sie wieder als CSV in MySQL einlesen?

    Frank

    1. Hallo,

      schreib dir doch einfach ein XSL(T) Dokument, welches die XML Dateien in CSV Dateien zurückverwandelt und dann kannst du sie wieder als CSV in MySQL einlesen?

      Frank

      eine kompliziertere methode fällt dir nicht ein ;)

      ich hab ein file mit mehr als 2 dimensionen (einen baum also) darum wäre csv ein rückschritt

      1. Wieso, was ist daran so _kompliziert_, eine komplexe Struktur auf 1 bis n einfachere Strukturen zurückzuführen, deren weitere Verwendung bekannt und einfach bzw. weniger schwierig ist?

        Von Xml Verarbeitung mit PHP hast du anscheinend nicht viel Ahnung. Ich hoffe, du erwartest nicht von diesem Forum, dir die Lösung auf dem Silbertablett zu servieren? Das wird mit hoher Wahrscheinlichkeit auch nicht passieren.

        Lies dich doch mal zu dem Thema DOM (Document Object Model) und XPath (eine XML Navigations- und Abfragesprache) ein, damit solltest du in der Lage sein, im PHP Code die INSERTs für die MySQL Datenbank zusammenzufrickeln.

        mit mehr als 2 dimensionen (einen baum also)

        Nicht zwingendermassen also.

        darum wäre csv ein rückschritt

        Deine eingeschränkte Ansicht der Dinge ...

        Viel Freude noch damit.

        Frank

        1. Von Xml Verarbeitung mit PHP hast du anscheinend nicht viel Ahnung.

          sagte ich ja bereits

          Ich hoffe, du erwartest nicht von diesem Forum, dir die Lösung auf dem Silbertablett zu servieren? Das wird mit hoher Wahrscheinlichkeit auch nicht passieren.

          habe ich auch nicht verlangt - die ursprüngliche Frage war einfach, eine entsprechend einfache Antwort ohne herumbrunzen (wie wir Österreicher sagen) hätte gereicht

          z.B. "Versuchs mit SimpleXML weil ..."
          oder "Hast du schon mal an load_file() gedacht ..."

          mit mit Stringmanipulation ein paar inserts "zusammenfrickeln" ist eine schöne Sache, nur erscheint mir das etwas ineffizient wenn es direkt auch geht

          In jedem Fall, danke für die Antwort

  2. Hallo,

    MySQL hat seit 5.x gewisse XML-Funktionen(über die ich aber nichts genaues weiß).
    Schau doch mal in der Dokumentation und hier gibts ein Forum dazu.

    Gruß, Nils