Nina: Array verschönern

Beitrag lesen

Moin,

in der Tat handelt es sich um eine Rückgabe von XML-Daten.
Doch diese kommen von einer API, die immer die selbe Struktur hat und bei der es in jedem Fall überflüssig ist, dass der Array das wie besprochen Unterteilt:
<?
class XMLParser
{
    var $parser;
    var $filePath;
    var $document;
    var $currTag;
    var $tagStack;

function XMLParser($path)
    {
    $this->parser = xml_parser_create();
    $this->filePath = $path;
    $this->document = array();
    $this->currTag =& $this->document;
    $this->tagStack = array();
    }

function parse()
    {
    xml_set_object($this->parser, $this);
    xml_set_character_data_handler($this->parser, 'dataHandler');
    xml_set_element_handler($this->parser, 'startHandler', 'endHandler');

if(!($fp = fopen($this->filePath, "r")))
    {
        die("Cannot open XML data file: $this->filePath");
        return false;
    }

while($data = fread($fp, 4096))
    {
        if(!xml_parse($this->parser, $data, feof($fp)))
        {
        die(sprintf("XML error: %s at line %d",
                xml_error_string(xml_get_error_code($this->parser)),
                xml_get_current_line_number($this->parser)));
        }
    }

fclose($fp);
    xml_parser_free($this->parser);

return true;
    }

function startHandler($parser, $name, $attribs)
     {
    if(!isset($this->currTag[$name]))
         $this->currTag[$name] = array();

$newTag = array();
    if(!empty($attribs))
         $newTag['attr'] = $attribs;
    array_push($this->currTag[$name], $newTag);

$t =& $this->currTag[$name];
    $this->currTag =& $t[count($t)-1];
    array_push($this->tagStack, $name);
     }

function dataHandler($parser, $data)
     {
    $data = trim($data);

if(!empty($data))
    {
         if(isset($this->currTag['data']))
        $this->currTag['data'] .= $data;
         else
        $this->currTag['data'] = $data;
    }
     }

function endHandler($parser, $name)
     {
    $this->currTag =& $this->document;
    array_pop($this->tagStack);

for($i = 0; $i < count($this->tagStack); $i++)
    {
         $t =& $this->currTag[$this->tagStack[$i]];
         $this->currTag =& $t[count($t)-1];
    }
     }
}
?>

So sieht es z.B. aus:
<myapi>
    <data>
        <d0>
            <title>foo bla</title>
            <description>bar bla</description>
        </d0>
        <d1>
            <title>foo1</title>
            <description>bar1 blub</description>
        </d1>
    </data>
    <qid>xyz</qid>
</myapi>

Egal, was ich an der Klasse ändere: sie funktioniert anschließend nicht mehr bzw. überschreibt sämtliche Daten. Bekomme es leider auch nach langem Probieren nicht hin :(

Bitte um Hilfe