23.2 XML_Beautifier 

Besprochene Version: 1.1 | Lizenz: PHP-Lizenz |
Klassendatei(en): XML/Beautifier.php |
Der XML_Beautifier ist eine Klasse, die es Ihnen ermöglicht, XML-Daten oder -Dateien optisch zu »verschönern«. Wenn Sie beispielsweise einen XML-Datenstrom von einem Programm übernehmen, sind diese Daten häufig optisch nicht schön aufbereitet. Das liegt daran, dass es, wenn die Daten maschinell verarbeitet werden sollen, keinen Grund dafür gibt, sie ordentlich zu formatieren. Möchten Sie die Daten allerdings auf dem Bildschirm darstellen oder ausdrucken, ist eine ordentliche Formatierung sehr hilfreich.
Ich denke, Sie werden mir zustimmen, wenn ich sage, dass diese XML-Daten eher schlecht zu lesen sind:
<daten><name><vorname>Carsten </vorname><nachname>Moehrke</nachname></name> <gebtag> <tag>5</tag> <monat>2</monat> <jahr>1971 </jahr> </gebtag> </daten>
Um diese Daten, die für das Beispiel in der Datei daten.xml abgelegt wurden, korrekt zu formatieren und auf dem Bildschirm auszugeben, reichen die Zeilen aus Listing 23.1 schon aus.
require_once ('XML/Beautifier.php'); $beauty = new XML_Beautifier(); $res = $beauty->formatFile('daten.xml'); if (PEAR::isError($res)) { die($res->getMessage()); } else { echo "<pre>".htmlspecialchars($res)."</pre>"; }
Listing 23.1 Formatierung mithilfe von XML_Beautifier
Im Browser erscheint der Code dann korrekt formatiert:
<daten> <name> <vorname>Carsten</vorname> <nachname>Moehrke</nachname> </name> <gebtag> <tag>5</tag> <monat>2</monat> <jahr>1971</jahr> </gebtag> </daten>
Die Methode formatFile() übernimmt die Daten aus einer Datei und bereitet sie entsprechend auf. Wenn Sie ihr keinen zweiten Dateinamen übergeben, gibt sie die aufbereiteten Informationen als String zurück. Erhält die Methode einen zweiten Dateinamen als Parameter, so versucht sie, die Daten in einer neuen Datei abzulegen. Sollte bei dem Formatierungsprozess oder beim Abspeichern ein Fehler auftreten, generiert die Methode ein PEAR_Error-Objekt.
Um die Daten auf dem Bildschirm auszugeben, müssen sie natürlich noch so aufbereitet werden, dass der Browser die Daten auch darstellt und nicht selbst interpretiert. Um die Einrückungen zu erhalten, habe ich dazu das Tag <pre></pre> genutzt und, damit die Kleiner-als- und Größer-als-Zeichen auch korrekt dargestellt werden, die Daten an htmlspecialchars() übergeben.
Da die XML-Daten natürlich nicht immer aus Dateien kommen, kann das Paket auch Daten konvertieren, die in einem String übergeben werden. Hierzu müssen die Daten an formatString() übergeben werden. Diese Methode ist nicht in der Lage, die Daten in einer Datei abzulegen, und kann sie nur in Form eines Strings zurückgeben.
Sie haben durchaus die Möglichkeit, das Verhalten des Renderers mit einigen Optionen zu steuern, so dass die zurückgegebenen Daten individueller gestaltet werden können. Die Optionen können Sie in Form eines Arrays direkt an den Konstruktor oder die Methode setOptions() übergeben. Einzelne Optionen können auch mit setOption() gesetzt werden. Diese Methode bekommt kein Array, sondern nur den Namen der Option und den gewünschten Wert als Parameter übergeben.
In Tabelle 23.1 finden Sie die Namen der Optionen mit einer Erläuterung.