Andreas Korthaus: XML parsen mit PHP

Beitrag lesen

Hi!

XML ist nichts weiter als eine andere Form der Datenhaltung. Der einzige Vorteil ist, daß die Daten baumweise und recht frei strukturiert werden können, das ist aber auch alles. Dies würde Dir beim Speichern der Formulare allerdings durchaus entgegen kommen.

schon, wobei, so kompliziert wird das auch nicht relational. Und im prinzip muss ich beim auslesen eiens XML-Baums genau dasselbe machen wie mir die Daten aus den relationale Tabellen zusammensuchen, nur eben das ich das bei der DB jedemal  mit einer DB-Abfrage machen muss. Auf der anderen Seite muss ich nicht immer die gesamten Daten durchgehen.

Es macht aber keinerlei Unterschied, ob Du Deinen Benutzern erlaubst, Tabellen anzulegen, oder ihnen erlaubst, Dateien anzulegen. Darüber hinaus hat XML einen ganz extrem gravierenden Nachteil: Es verwendet das mit weitem Abstand schlechtest geeignete Format zum Speichern von Daten: einen Bytestrom. Für Dich als Benutzer mag es wunderbar strukturiert aussehen, für den Computer ist es nichts weiter als eine unendlich lange Kette von Bytes, die er Byte für Byte einlesen und interpretieren muß.

Bei kleinen Datenmengen ist das ja kein problem, denn auf der anderen Seite muss due Software jedesmal eine Verbinding zur DB herstellen, und in meinem Fall könnte die Daten nicht mit einer Abfrage ermittelt werden, sondern in jedem Datensqatz muss überprüft werden um welchen Typen es sich handelt und ggfs. eine ander Tabelle abgefragt werden, ist die Frage was da jetzt effizienter istm, ich denke bei wenig Daten pro Formukar ist XML durchaus schnell, nur habe ich mir das parsen von XML etwas einfacher vorgestellt, und über das erzeugen will ich lieber noch gar nicht nachdenken ;-)

Der Grund, warum Datenbanken so schnell sind, sind die Indizes und/oder blockweise Datenhaltung - beides ist bei XML-Dateien normalerweise nicht vorhanden.

Gut das ist ja kein großes Problem selbst einen index aufzubauen, und den z.B. in einem PHP-Array fest zu speichern.

Dazu kommt dann noch, daß Datenbanken sowohl ihre Verwaltungsinformationen als auch die Daten "roh" speichern können und nicht in XML-fähige Texte umsetzen müssen bzw. vom Text aus wieder in ein vom Computer verwendbares Format.

Ja das stimmt schon. Das probelm ist nur, dass ich keien DB.Struktur finde, die ich direlkt mit ein paar Joins abfragen kann, ich muss die Datensätze immer nacheinander durchgehen, in PHP fragen fragen was für ein Feldtyp, und die entsprechende Tabelle dann weiter abfragen. Oder wäre das vielleicht eien Aufgabe die ich mit stored-procedures oder Trigger lösen könnte?

XML ist deshalb in erster Linie ein (wirklich wunderbares) Daten_austausch_format und nicht zum eigentlichen Speichern von Daten gedacht. IIRC ist das auch in der Einleitung der XML-Spezifikation so beschrieben und mir ist nach wie vor schleierhaft, warum alle Welt so sehr auf XML für alles und jedes steht.

Da hast Du eigentlich Recht.

Das beste Beispiel für die Unbrauchbarkeit von XML für die Datenhaltung ist meiner Meinung nach ja dieses Forum und seine bekanntermaßen zeitweise recht gemächliche Geschwindigkeit, die -soweit mir bekannt- immer dann rapide in den Keller geht, wenn die Forumsdaten geschrieben (oder gelesen) werden müssen. Das Problem wurde dadurch eingrenzt, daß ein Speichercache dazwischen geschaltet wurde und nur selten tatsächlich gespeichert wird - mit entsprechendem Datenverlust bei Ausfällen zur Folge.

Tja...

Aber egal: XML ist für Deine Formulare durchaus sehr gut geeignet, die Verwaltung der über das Formular eingegebenen Daten würde ich aber wirklich "einem Profi überlassen", einer Datenbank.

Ja, das könnte man so machen.

Aber womit parse ich am besten XML mit PHP? Hat da jemand von Euch Erfahrung?

Mal als Beispiel die alte XML-Struktur aus dem letzten Thread, ist ja  ein ähnliches Problem:

<?xml version="1.0" encoding="ISO-8859-1"?>
<Warengruppen>
  <Lebensmittel>
    <Getränke>
    </Getränke>
      <Molkereiprodukte>
        <Milchprodukte>
        </Milchprodukte>
        <Quarkprodukte>
        </Quarkprodukte>
      </Molkereiprodukte>
    <Backwaren>
    </Backwaren>
  </Lebensmittel>
</Warengruppen>

Wie würdet Ihr das parsen? Ich habe es mal mit fogenmder Funktion versucht: http://de.php.net/manual/de/function.xml-parse-into-struct.php

Aber das gibt eine recht wilde Struktur wie ich finde. Mit welchen Funktionen würdet Ihr das machen? mit den Expat(aber dann wie im Beispiel auf http://de.php.net/manual/de/ref.xml.php, oder?)  oder den DOM-XML Funktionen?
Kennt da vielleicht jemand eine gute Anleitung, halt XML-parsen mit PHP? Habe das noch nie gemacht und irgendwie komme ich mit beiden Versionen(Expat/DOM) noch nicht so richtig klar, ist doch etwas komplizierter als ich immer gedacht hatte :-)

Oder bringt PEAR hier irgendwas: http://pear.php.net/manual/en/package.xml.php? Aber auch dazu finde ich keine vernünftige Dokumentation. Was würdet Ihr empfehlen?

Viele Grüße
Andreas