| Die modernste Methode, Daten zu codieren, ist XML. Die Dateien bestehen nur aus einfachem Text und sind daher mit allen Standard-Programmen kompatibel. | Hier wird gezeigt, wie sich XML-Daten mit PHP zu ganz unterschiedlichen 'Produkten' verarbeiten lassen. |
PHP
|
PHP Hypertext Processor |
| Demonstration | XML-Daten als HTML-Tabelle, Grafik, Text, SQL-Script, . . |
| XML-Daten | Zufalls-Daten zum Demo-Beispiel 'Farben' |
| Grundstruktur | Aufbau eines XML-Parsers mit PHP-Funktionen |
| Event-Handler | Behandlung der Parser-Ereignisse |
XML-Daten |
|
|
Diese Zufalls-Daten werden für das Demo-Beispiel verwendet.
Sie enthalten Daten (Farbname,R,G,B) einiger HTML-Standard-Farben sowie einer Zufallsfarbe. Die Daten könnten alternativ auch aus jeder anderen Quelle stammen, z.B. aus einer Datenbank, ... Der offene XML-Standard erlaubt die Codierung praktisch aller denkbarer Daten in Form von Text-Dateien. Die Werte werden zur Kennzeichnung in 'tags' wie in HTML eingeschlossen. Die tags (z.B. <farbe></farbe> ) können aus einem normierten Namespace stammen oder (wie hier) frei gewählt werden. Die einzelnen Elemente dürfen beliebig tief gestaffelt werden, einander jedoch nicht überschneiden. Insgesamt ergeben sie einen 'hierarchischen Baum' XML-Parser sind Standard-Programme bzw. -Module von Programmiersprachen, welche es erlauben, XML-Daten mit einfachsten Mitteln in jede gewünschte Form für Transport oder Darstellung umzuwandeln. ♦ Details zu XML und XML-Daten. Erzeugung der Zufallsdaten: Beim Laden der Seite wird von einem PHP-Programm (am Webserver) eine neue XML-Datei erzeugt. Anzahl und Werte der Daten werden mit einem Zufallsgenerator gesteuert. Die XML-Datei wird von den Parsern dieser Seite dazu benutzt, die verschiedenen Ausgabeformate zu erzeugen. Nach einigen Minuten wird die XML-Datei vom Server gelöscht. |
<?xml version='1.0' ?>
<!-- made by pstrainer@gmx.net --> <demo> <farbe> <name>lime</name> <r>0</r><g>255</g><b>0</b> </farbe> <farbe> <name>maroon</name> <r>128</r><g>0</g><b>0</b> </farbe> <farbe> <name>teal</name> <r>0</r><g>128</g><b>128</b> </farbe> <farbe> <name>silver</name> <r>192</r><g>192</g><b>192</b> </farbe> <farbe> <name>zufall</name> <r>59</r><g>117</g><b>165</b> </farbe> </demo> |
Parser-Grundstruktur |
|
|
Ein 'Parser' ist ein Programm, welches Daten liest und verarbeitet. Alle modernen Standard-Programme enthalten Parser für die Eingabe und Ausgabe ihrer Daten im XML-Format. |
Mit XML-Parsern können XML-Daten in alle gängigen Daten-Formate umgewandelt werden.
Alle modernen Programmiersprachen verfügen über Parser-Module. In dieser Webseite wird ein XML-Parser verwendet, um die gleichen Daten wahlweise in eine HTML-Tabelle und / oder in eine SVG-Grafik umzuwandeln. |
|
An dieser Stelle wird das Prinzip eines XML-Parsers als SVG-Grafik dargestellt.
Aus den 'Umgebungs-Daten' ihres Browsers geht hervor, dass sie vermutlich keine SVG-Grafik sehen können. Details dazu finden sie Kapitel SVG dieses Webs. |
|
|
Alle verwendeten Funktionen stammen aus dem PHP-Modul xml Zunächst wird geprüft, ob das Modul geladen wurde. ♦ Details: verfügbaren Funktionen des PHP-Moduls. |
$xml_ok = 0; if (extension_loaded("xml") {xml_ok++;} Live- |
|
Ein XML-Parser kann sehr einfach aufgebaut werden: ► Mit Funktion xml_parser_create wird ein Parser-Objekt (hier $p )erzeugt. Dieses Objekt wird in allen folgenden xml-Funktionen verwendet. ► Die Funktionen tag_a bzw tag_z werden als 'Handler' (Ereignis-Bearbeiter) für Anfang und Ende von tags definiert, tag_d wird als Handler für die (zwischen den tags liegenden) Daten definiert. Im nächsten Absatz finden sie Erklärung und Beispiele für die Handler-Funktionen. ► Die XML-Datei (hier xml_161001.xml ) wird geöffnet und mit Funktion xml_parse verarbeitet. Wenn dabei Parser-Events auftreten, werden die jeweiligen Handler-Funktionen aufgerufen. ► Nach Gebrauch wird die Datei mit Funktion fclose geschlossen und der Parser mit Funktion xml_parser_free freigegeben. |
$path = "xml_161001.xml";
// XML-Parser erzeugen
$p = xml_parser_create();
// Event-Handler definieren
xml_set_element_handler($p,"tag_anf","tag_end");xml_set_character_data_handler($p,"tag_dat"); $fp = fopen($path,"r"); if($fp) {
while ($data = fread($fp,10000)) {
}// Daten parsen
$x=xml_parse($p,$data,feof($fp));if(!$x) {printf "XML error ... ";} @fclose($fp); xml_parser_free($p); |
| ♦ Details zum Öffnen und Lesen von Dateien finden sie der Seite PHP & Dateisystem. | In allen anderen Programmiersprachen arbeiten Parser ganz ähnlich. Beachten sie die Möglichkeit, den in allen modernen Browsern enthaltenen → XSL-Parser zu verwenden. |
Event-Handler |
|
|
Event-Handler sind Programme, die bei bestimmten Ereignissen aufgerufen werden. Im ↑ Parser wurden die Handler für 3 Ereignisse definiert: tag-Anfang (z.B. <farbe> oder <name>), tag-Ende (z.B. </farbe> oder </name> ) und tag-Daten (zwischen Anfang und Ende wurden Daten gefunden). |
Die Programmierung folgt einem einfachen Schema: ► Es muss festgelegt werden, welche Funktion bei einem bestimmten Event aufgerufen werden soll. ► Dann wird eine Aufgabe ausgeführt (hier: XML-Datei wird gelesen). ► Jedesmal wenn ein bestimmtes Event eintritt, wird die entsprechende Handler-Funktion ausgeführt. |
|
Beispiel: Die oben Live gezeigte Ausgabe wird von diesen Funktionen (vereinfacht) ausgeführt. ► Jede Parser-Funktion erhält als erstes Argument das Parser-Objekt (Sie können mehrere Parser gleichzeitig betreiben). ► Die Element-Handler erhalten als Argument den Namen des jeweils auslösenden tags in Großbuchstaben. ► Der Element-Start-Handler erhält zusätzlich die Daten allfälliger Attribute. ► Der Daten-Handler erhält die Daten zwischen den tags. ► Die 3 gezeigten Handler führen hier (vereinfacht) keine andere Arbeit aus, als mit print auszugeben, was gefunden wurde. In der Praxis legen sie in diesen Funktionen fest, was mit den gefundenen Daten geschehen soll. |
function tag_anf($parser,$tag,$atts) {
if($tag=="FARBE") {print "<br>";}
}print "tag_anfang($tag), "; function tag_dat($parser, $data) { print "tag_daten($data), ";
}function tag_end($parser, $tag) {
if($tag=="DEMO") {print "<br>";}
}
print "tag_ende($tag), "; |
|
Fatal error: Call to undefined function write_my_modif_time() in /home/topsoft.at/www.topsoft.at/pstrainer/entwicklung/php/xml/xml_parsing.php on line 921 |