Ralf: XML Daten verarbeiten

Beitrag lesen

Der Ort und die Ablage im HTML-Code ist, so wie ich dein Vorhaben nun verstanden habe, nicht weiter von Belang, also Schwamm drüber.

Die Daten können aber nun einmal nur innerhalb einer HTML-Seite erzeugt werden. Durch das Erzeugen eines <script> Tags steht mir zur Verarbeitung dann Javascript zur Verfügung. Dieses ist dann sozusagen das Medium, die Daten an PHP zu übergeben.
AJAX kommt dafür übrigens nicht in Frage, da es keine Übergabe an eine andere Domain zulässt (jedenfalls ist der XMLHttpRequest in dieser Hinsicht beschränkt). Die HTML-Seite liegt in einer Domain, auf die ich normal keinen Zugriff habe.

Das HTML-Formular ist nur zur Darstellung im Browser gedacht und für dein Vorhaben insofern nützlich, als man mit Javascript auf die Elemente eines Formulars recht einfach zugreifen kann, und es die einzige Möglichkeit ist, einen HTTP-POST-Request an den Server abzusetzen, wenn man mal von den Möglichkeiten von AJAX absieht.

Nein - mein Beispiel ist schon so real zu verstehen, als dass es den Ausgangspunkt der Daten beschreibt. Mit dem <script> bemühe ich externes Javascript, um die innerhalb des <pre> Tags liegenden XML-Daten als "value" eines <input> Tags zu setzen und dies dann per HTTP-POST zu versenden.

Du benötigst also, so wie es sich darstellt einen XML-Parser, der aus dem XML die Nutzdaten vom Overhead trennt, oder auch einen Zugriff via DOM oder ähnlich.

Ich habe aus dem PHP-Handbuch folgendes Beispiel entnommen:

  
<?php  
$simple = "<para><note>simple note</note></para>";  
$p = xml_parser_create();  
xml_parse_into_struct($p, $simple, $vals, $index);  
xml_parser_free($p);  
echo "Index array\n";  
print_r($index);  
echo "\nVals array\n";  
print_r($vals);  
?>  

Ich habe das wie schon erwähnt noch nicht ausprobiert, vermute aber mal, dass es mit der vorhandenen Version 4.1.0 ohne weitere Voraussetzungen funktioniert.

Du erwähntest Version 4.1 von PHP. Diese ist schon recht betagt und bietet noch nicht allzu viele Möglichkeiten. Außerdem kann es sein, dass die XML- oder/und die DOM-Extension gar nicht eingebunden wurde. Das bekommst du aber mit phpinfo() raus. (Von der DOM-Implementierung gibt es übrigens zwei Versionen. Soweit ich mich erinnere, war die mittlerweile veraltete Version lange Zeit als experimentall gekennzeichnet, weswegen sie kaum Einzug bei Providern gehalten haben dürfte.)

Mein Webspace wird bei keinem großen Provider gehostet. Ich habe aber zu sehr geringen Kosten eine Leistung, für die ich woanders einen eigenen Server laufen lassen müsste. Dafür bin ich etwas von den sonstigen Gegebenheiten abhängig. Vielleicht kann ich auch PHP5 bekommen, aber es würde dauern (simpleXML sieht mir recht interessant aus).

Hier mal ein paar Details aus phpinfo():
with-xml=/usr' '--with-expat-dir=/usr' '
XML Support active
XML Namespace Support active
EXPAT Version expat_1.95.8

Die Daten liegen also bereits in der XML-Form vor. Mit PHP lässt sich einfacher auf dessen eigene Datenstrukturen, wie beispielsweise Arrays, oder auch zu Bäumen verschachtelte Arrays, zugreifen.

Wen ich das richtig verstanden habe, macht xml_parse_into_struct()doch genau das, was ich brauche? Also die Umsetzung in Arrays?

Für solcher Art Abfragen hat man XPath erfunden. Siehe: Darstellung von XML-Daten. Hauptsächlich wird sie wohl bei XSL-Transformationen verwendet, kann aber auch in der DOM-Extension genutzt werden.

Mir geht es nicht um die Darstellung der Ausgangsdaten (trotzdem hat mich dein Hinweis auf eine interessante Idee gebracht!). Ich will aus den Daten Listen und Grafiken erstellen. Dazu müssen sie extrahiert, verdichtet, sortiert und formatiert werden.

Wenn die Daten noch nicht verpackt sind, lohnt sich sicher ein Blick auf JSON, ein Format, das Daten so verpacken kann, dass diese für Javascript sehr leicht zu lesen sind, und sich auch sonst leicht parsen lassen. JSON-Implentierungen gibt es auch für PHP.

Auf JSON bin ich schon einmal gestoßen, als ich festgestellt habe, dass ich mit AJAX (bzw. XMLHttpRequest) nicht weiter komme. Aber wie schon mal geschrieben, geht es primär nicht um den Transport der Daten.

Auf jeden Fall schon mal vielen Dank, denn ich habe einige Anregungen bekommen.

Ralf