XML oder HTML (AJAX)

Guten Morgen zusammen,
ich befasse mich grade mit dem Thema AJAX.
Folgende Sachverhalt:
Ich habe eine Datenbank (MySQL) mit Telefondaten.
Bsp. Tabelle ‚Mitarbeiter‘:

id - name - ort - rufnummer
1 - mustermann - Berlin - 3311
2 - musterfrau - Bonn - 3214

Nun habe ich auf der Ausgabe-Seite eine Möglichkeit nach dem Ort zu filtern. Die Abfrage wird per Javascript (XMLHttpRequest-Objekt) an den Server geschickt.
Ich kenne 2 Möglichkeiten die Daten zu verarbeiten:

  1. Antwort als Text:
    Die antwortende Seite liest per PHP die Daten aus der Datenbank aus und gibt sie als html wieder

Bsp.:

NameOrtRufnummer
[…]

  1. Antwort als XML
    Diese Möglichkeit habe ich noch nie durchgeführt, stelle mir das aber so vor:
    Anfrage an Server senden --> Server erstellt per PHP das XML Dokument
    z. B.

    musterfrauBonn
    […]

Und nun wird clientseitig das XML-Dokument ausgelesen und in eine dynamische Tabelle generiert.

So und nun zu den eigentlichen Fragen.

  • Wann sollte ich die Variante 1, wann Variante 2 nutzen?
  • Ist Variante 2 so überhaupt sinnvoll / üblich?
  • Gibt es evtl eine elegantere Lösung?

Vielen Dank vorab und Gruß

Marcel

P. S.
Habe dieses Forum gewählt, da ich hier vermute, das die Vorteile / Unterschiede XML zu HTML besser bekannt sind.

Hallo Marcel

und dann bleibt noch die von mir favorisierte Variante 3:

Aus der DB wird XML geliefert. Das wird per XSLT in HTML umgesetzt und dieser als Text per AJAX ausgeliefert.

Grundsätlich mache ich das so, wenn auch per aspx, c#, Web-Services und dahinter einer DB.

Vorteil me:
Ich lege fertige XML Abschnitte für einen Datensatz (z.B. eine Produktbeschreibung mit Detailangaben) fertig in die DB. Damit kann ich per Filter (SQL auf DB) schnell alle relevanten Datensätze und damit die notwendigen XML-Ströme besorgen und in einem XMLDocument zusmmen fassen.

Dazu ggfs. noch ein paar zusätzliche Infos ins XML gepackt (heutiges Datum oder so).

Dann per XSLT in HTML umwandeln (Dort kann man auch sortieren und sowas einbauen). Damit kann die Darstellung sauber von den Daten getrennt werden, obwohl alles fast fertig in der DB liegen. Einfach das XSLT anpassen, voila.

Das HTML-Fragment ab in ein HTML-Dokument und ab die Seite. Damit läuft bei mir alles auf dem Server, bis die Seite fertig ist, (naja, noch n bisschen JavaScript, aber sonst …)

mfg

Dirk.Pegasus

Hallo nochmal,

und dann bleibt noch die von mir favorisierte Variante 3:

Aus der DB wird XML geliefert. Das wird per XSLT in HTML
umgesetzt und dieser als Text per AJAX ausgeliefert.

Also wenn ich das richtig verstehe liegen die Daten schon im XML vor?
Sprich:

name - vorname
Mustermann - Hans

wird zu:

name - vorname
Mustermann - Hans

verstehe ich das richtig?
Weil dann würde die Datenbank ja ziemlich „überfüllt“ werden.

Dann per XSLT in HTML umwandeln (Dort kann man auch sortieren
und sowas einbauen).

OK, XSLT muss ich mir noch aneignen, bin dem Bereich XML grade erst durch ein AJAX-Buch auf die Schliche gekommen.

Hatte mir das einfacher / anders vorgestellt:
Zugriff per PHP auf MySQL-Datenbank, erstellen der XML-Datei und dann per Javascript-DOM die Ausgabe erzeugen.
Bin da nur gescheitert, da die Datei nicht als XML erkannt wurde (denke der Mime-Type)

Naja, soweit der Laie…

bedankt und Gruß

Marcel

Hallo Marcel,

Also wenn ich das richtig verstehe liegen die Daten schon im
XML vor?

Ja.

Weil dann würde die Datenbank ja ziemlich „überfüllt“ werden.

Überfüllt ist relativ. So braucht man halt nichts mehr zusammensetzen, andererseits sind die Daten redundant. Bei „kleinen“ Datenmengen und komplizierten XML Strukturen kann das schneller sein. Kommt halt auf den Fall an. Hast du denn wirklich große (so ab ein paar meg)Datenmengen?

OK, XSLT muss ich mir noch aneignen, bin dem Bereich XML grade
erst durch ein AJAX-Buch auf die Schliche gekommen.

Der Strom ist XML, das kann per write() eh nicht einfach in die HTML Seite geschrieben werden. Die XML-Tags sind ja idR keine HTML-Tags. Du müßtest die XML-Daten eh in der HTML Seite „parsen“.

Hatte mir das einfacher / anders vorgestellt:
Zugriff per PHP auf MySQL-Datenbank, erstellen der XML-Datei

Ich kenne PHP nicht. Ob man damit XML generieren kann? Man kann zwar alles per String-Operationen erreichen, aber das ist sehr empfindlich. Ich trenne die Datenpflege und das Erzeugen des XML von der Web-Darstellung. Pflege per meineAnwendung.exe, dann in die DB und dann erst ab ins web.

und dann per Javascript-DOM die Ausgabe erzeugen.

In der Seite kommt auch bei deiner Methode nur XML an. Das kann man zwar einfach reinschreiben, aber wie sieht das denn aus … Kopier doch mal ein XML Fragment in den Body einer HTML Seite und schau es dir an.

Bin da nur gescheitert, da die Datei nicht als XML erkannt
wurde (denke der Mime-Type)

Mag sein, werd mal zuhause nachsehen, da hatte ich mal ein AJAX Experiment veranstaltet. Da hatte ich aber das Parsen zu HTML auch vorab über ein XSLT unternommen.

mfg

Dirk.Pegasus

Hi Dirk,

Bei „kleinen“ Datenmengen und komplizierten XML Strukturen kann
das schneller sein. Kommt halt auf den Fall an. Hast du denn
wirklich große (so ab ein paar meg)Datenmengen?

Also bei meinem jetzigen Versuch handelt es sich um ca. 500 Datensätze (schon vorhanden). In der MySQL-Datenbank stehen Personen, Rufnummer, Ort und noch ein paar Infos.

Der Strom ist XML, das kann per write() eh nicht einfach in
die HTML Seite geschrieben werden. Die XML-Tags sind ja idR
keine HTML-Tags. Du müßtest die XML-Daten eh in der HTML Seite
„parsen“.

Und ich glaube da liegt mein Problem,
mit PHP kann ich zwar die Daten, wie du schon sagst mit String-Operationen, zusammenfassen, aber weiter komme ich nicht.
Theoretisch könnte ich die Daten in ein XML-File schreiben, dann die erzeugte XML öffnen und mittels DOM in die HTML „einbauen“. Dürfte aber Probleme geben, wenn mehrere Personen gleichzeitig darauf zugreifen.

und dann per Javascript-DOM die Ausgabe erzeugen.

In der Seite kommt auch bei deiner Methode nur XML an. Das
kann man zwar einfach reinschreiben, aber wie sieht das denn
aus … Kopier doch mal ein XML Fragment in den Body einer
HTML Seite und schau es dir an.

Genau, dann habe ich natürlich keine korrekte Ausgabe,
mittels JavaScript (so hab ich es auf einigen Seiten gelesen) liest man quasi das XML-File aus und erkennt z. B. Hans,
das dort Hans steht, diesen Wert trägt man dann in das HTML-File ein, also nicht das pure XML.

Mag sein, werd mal zuhause nachsehen, da hatte ich mal ein
AJAX Experiment veranstaltet. Da hatte ich aber das Parsen zu
HTML auch vorab über ein XSLT unternommen.

Hmm, vielleicht hilft mir XSLT ja auch schon weiter, wenn du was findest nur her damit, ich werde mal das Netz durchforsten.

Gruß

Marcel

Hallo Marcel,

egal wie der XML-Strom entsteht, er muss geparst werden. Per JS das DOM des XML auseinanderzunehmen erscheint mir etwas anstrengend. Idealerweise würde die Sprache, mit die Antwort für AJAX bereitgestellt wird, das Parsen übernehmen. Also soetwas (Fragment aus c#)

contTransform.Load(Server.MapPath(@"../xslt/myTransform.xslt"));
contTransform.Transform(xmlDoc, xslArg, contStream, null);
//der contStream beinhaltet dann den String mit den HTML Daten die in der Transformatin erzeugt wurden.

Schau mal z.B. unter : http://devzone.zend.com/node/view/id/1302
(Sicherlich gibts mehr Stellen, wo das erläutert ist)

Offensichtlich kann php sowas.

mfg

Dirk.Pegasus

Hallo Dirk,
jetzt glaube ich habe ich begriffen… (zumindest Verstehe ich den Artikel von devzone so)
Ich erzeuge oder habe das XML-File,
Die XSL ist quasi ein Template welches ich mir auch erstellt habe.
Nun gebe ich die Daten aus dem XML-File mithilfe der Schablone (XSL) und PHP als HTML aus.
Sehe ich das so richtig?

egal wie der XML-Strom entsteht, er muss geparst werden. Per
JS das DOM des XML auseinanderzunehmen erscheint mir etwas
anstrengend.

Denke auch das es sehr aufwendig ist, aber war bisher das einzige was ich kannte.

Idealerweise würde die Sprache, mit die Antwort
für AJAX bereitgestellt wird, das Parsen übernehmen.

Also bei mir PHP.

Glaube ich bin so schonmal ein Stück weiter.
Klasse, Danke!

Gruß und schonmal ein schönes WE

Marcel

P.S.
Ich spinne nun mal mein Vorhaben ein wenig weiter.
Ich habe eine Tabelle, in welcher ich suchen kann. Sobald ich die Suche abschicke soll per AJAX im Hintergrund die Datenbank ausgelesen werden und die Daten auf der Seite angezeigt werden.
Sinnvoll wäre also nun die Daten ins XML-Format zubringen, per PHP und XSL in HTML umwandeln und dann an die Urspürungsseie zurückzuschicken…
Hmm,
da muss ich mir nochmal einige Gedanken machen…

Hallo Marcel,

jetzt glaube ich habe ich begriffen… (zumindest Verstehe ich

fein

den Artikel von devzone so)
Ich erzeuge oder habe das XML-File,
Die XSL ist quasi ein Template welches ich mir auch erstellt
habe.
Nun gebe ich die Daten aus dem XML-File mithilfe der Schablone
(XSL) und PHP als HTML aus.
Sehe ich das so richtig?

Ja

Denke auch das es sehr aufwendig ist, aber war bisher das
einzige was ich kannte.

nja, das Leben geht weiter …

Idealerweise würde die Sprache, mit die Antwort
für AJAX bereitgestellt wird, das Parsen übernehmen.

Also bei mir PHP.

yap

Las mal weiter hören, klingt j spannend

mfg

Dirk.Pegasus

Hallo Dirk,
sorry für die späte Antwort,
aber beim letzten Versuch ist mir der Rechner abgestürzt.
Werde die Tage nochmal ne Zusammenfassung erstellen und dann hier posten.

Grüße

Marcel

Las mal weiter hören, klingt j spannend

mfg

Dirk.Pegasus