XaraX: rukursion, datenstuktur in xml baum wandeln

Beitrag lesen

hallo florian

habe mir meinen Müll nochmals zur Brust genommen und folgendes ist nun funktionstüchtig herausgekommen:

<?php
function mach_xml($a,$b=array('',TRUE))
   {

Definition von benötigkten Variablen

$br="\n";
   $S =' ';

Aufbau des Elements

$element= $b[1] ? '<?xml version="1.0" ?>' : '';
   $element.=$br.$b[0].'<'.$a['nodeName'];

Aufbau der Attribute

if(is_array($a['nodeAttr']))
      {
      foreach($a['nodeAttr'] as $k=>$v)
         {
         $element.=$S.$k.'="'.$v.'"';
         }
      }

Bestimmung des Inhalts

if($a['nodeValues']!==FALSE)
      {

# Bestimmung Welche Art Inhalt vorliegt

if(is_array($a['nodeValues']))
         {
         $element.='>';

# Aufbau der Kindelemente

foreach($a['nodeValues'] as $v)
            {

# Rekursion auf die Kindelemente

$element.=mach_xml($v,array($b[0]."\t",FALSE));
            }
         $element.=$br.$b[0].'</'.$a['nodeName'].'>';
         }
      else
         {

# Kindelement ist ein Textnode

$element.='>'.$a['nodeValues'];
         $element.=$br.$b[0].'</'.$a['nodeName'].'>';
         }
      }
   else
      {

# Element ist leer

$element.=$S.'/>';
      }

return($element);

#unset($element,$k,$v);

}

Das Datenfeld muß anders aufgebeut werden!

$a=array(
 'nodeName' =>'music',
 'nodeAttr' =>array(
  'id' =>199,
  'name' =>'FirstName'),
 'nodeValues' =>array(
    array(
    'nodeName' =>'album',
            'nodeAttr' =>array(
     'albumid' =>'1234',
     'albumname' =>'The King'),
            'nodeValues' =>array(
       array(
       'nodeName' =>'tracks',
       'nodeAttr' =>array(
        'albumid'=>'1234'),
       'nodeValues' =>array(
          array(
          'nodeName' =>'track',
          'nodeAttr' =>array('albumid'=>'1234'),
          'nodeValues' =>false),
          array(
          'nodeName' =>'information',
          'nodeAttr' =>array('albumid'=>'1234'),
          'nodeValues'=>false),
          ),
        )
       )
     )
    )
 );

echo mach_xml($a);
?>

Gruß aus Berlin!
eddi