DB nach XML auf grundlage einer dtd

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • DB nach XML auf grundlage einer dtd

    Hallo,
    gleich die nächste Frage von mir.
    Ich habe die Aufgabe (wie schon beschrieben), eine Access Produktdatenbank, in ein standardisiertes XML Format zu bekommen, das ganze ist eine lokale angelegenheit, also nix Webserver, läuft über die Kommandozeile.

    Die XML Spezifikation, steht als DTD zur Verfügung, wie stellt man das optimalerweise an, das ich die xml datei nicht im PHP script, mit einer langen liste von
    xmlwriter_write_element ($memory,'NAME',$header[kunden_name]);
    Anweisungen erzeuge, sondern mit einer funktion arbeiten kann, welche die DTD interpretieren kann (also Feldtypen etc. auswertet, die in der DTD stehen).
    So stelle ich mir das irgendwie vor, nur wie mappe ich die Tabellenspalten auf die XML Felder? und das ist leider nicht mit <produkt>Produktname</produkt> getan, sondern das sind recht komplexe abfragen etc.

    ich bin im Moment soweit, das ich mir erstmal alle benötigten daten der DB, in ein Array schreiben lasse.
    das könnte ich jetzt zu fuss mit den xmlwriter funktionen einrichten, aber da das ganze variabel sein sollte, (also wenn sich die spezifikation und damit die dtd ändert) dachte ich mir, ich muss doch die dtd gleich verwenden können + mapping auf die DB.

    Ich benutze übrigens PEAR und könnte auch XML_QUERY2XML verwenden.
    Jedoch kam ich nicht gleich damit zurecht bzw. weiss ich noch nicht ob es meinen anforderungen genügt, weil es eben sehr viele verschiedene Abfragen gibt.

    Wie sieht das eigendlich mit der Performance aus? bei 50000 Datensätzen, wie kann man das optimieren, es dauert schon erstmal ganzschön das array zu erzeugen.
    Und das bricht auch irgendwann ab, weils zu lange dauert. (max exec time hab ich in der ini schon hochgesetzt)
    Code:
    $res2 =& $db->query("SELECT * FROM PublicItems WHERE lieferantenid ='IDT'");
    // Schreibe Artikel Daten in Array.
    $i=0;
    while ($res2->fetchInto($row[])) {
        //schreibe jede Zeile in ein Array
        foreach ($row[$i++] as $key => $value) {
          $items[$i][$key] = $value;
        }
    }
    # DEBUG: DB Array anzeige/ausgabe #################
      print_r($items);
      $dump=var_export($items, true);
      file_put_contents ("vardump-items.txt", $dump);
    # #########################################
    Ich weiss, der SELECT * ist nicht optimal, ändere ich aber noch auf die genauen spalten.
    Kann ich die executionTime messen? (bestimmt, nur wie)

    Danke für Hinweise.
    beste grüße
    marcus
    Zuletzt geändert von m@localhorst; 03.06.2006, 12:04.
Lädt...
X