XML-Elemente, deren eigentlicher Sinn sich erst über ein Attribut definieren, sind auf normalem Weg sehr unkomfortabel einzulesen. Dennoch begegnet man solchen Strukturen immer wieder. Hier ein stark vereinfachtes Beispiel:
Hier kann eine Transformation der Elementnamen wesentliche Erleichterung bringen, wie anschließend gezeigt wird.
<?php
require_once("../xml-line.php");
$mylines = new xml_line("xml-files/wetterdaten.xml" , "hixml");
$arg1=array("0", "messung","", array('typ' => 'temp'));
$arg2=array("0", "messung","", array('typ' => 'luftf'));
$arg3=array("0", "messung","", array('typ' => 'druck'));
$mylines->rename_element ($arg1, "temperatur");
$mylines->rename_element ($arg2, "luftfeuchtigkeit");
$mylines->rename_element ($arg3, "druck");
$mylines->xml_stream();
echo $mylines->get_output();
?>
Nun hat man die Daten so, dass man die get_record()-Methode verwenden kann.
Im Folgenden lassen wir uns aber nicht den XML-String anzeigen und speichern ihn auch nicht in einer Datei zwischen, sondern übergeben ihn an ein neues XML-Line-Objekt. Aus kosmetischen Gründen entfernen wir auch gleich noch die überflüssig gewordenen Attribute.
<?php
require_once("../xml-line.php");
//Achtung: Ausgabeformat ist XML!
$mylines = new xml_line("xml-files/wetterdaten.xml" , "xml");
$arg1=array("0", "messung","", array('typ' => 'temp'));
$arg2=array("0", "messung","", array('typ' => 'luftf'));
$arg3=array("0", "messung","", array('typ' => 'druck'));
$mylines->rename_element ($arg1, "temperatur");
$mylines->rename_element ($arg2, "luftfeuchtigkeit");
$mylines->rename_element ($arg3, "druck");
//Alle Attribute mit Namen "typ" entfernen:
$attrarg = array(0,'','','typ');
$mylines->delete_attribute($attrarg);
$mylines->xml_stream();
$transformation = $mylines->get_output();
// neuen XML-String direkt parsen:
$secondpass = new xml_line($transformation);
$secondpass->get_record(0,"messtag");
$secondpass->xml_stream();
$wdaten_arr = $secondpass->table_result[0];
?>
Das reduzierte Ergebnisarray lassen wir mit print_r($wdaten_arr) ausgeben:
Array
(
    [0] => Array
        (
            [_@date] => 2005-06-12
            [temperatur] => 15
            [luftfeuchtigkeit] => 80
            [druck] => 1011
        )
    [1] => Array
        (
            [_@date] => 2005-06-13
            [temperatur] => 20
            [luftfeuchtigkeit] => 53
            [druck] => 1050
        )
    [2] => Array
        (
            [_@date] => 2005-06-14
            [temperatur] => 22
            [luftfeuchtigkeit] => 40
            [druck] => 1124
        )
)
Nun sollte es z.B. keine Schwierigkeiten mehr machen, die erfassten Daten in eine Datenbank einzulesen oder sie mit einer halbwegs brauchbaren Templateklasse direkt auszugeben.