XaraX: rukursion, datenstuktur in xml baum wandeln

Beitrag lesen

hallo Florian!

Für mich persönlich wäre es einfacher Kindknoten/Strings/Empty als Value anzunehmen, aber das steht Dir natürlich frei. Habe nochmal ein wenig rumgemurchst und nun scheint mach_xml() aus einem anderen Datenfeld folgendes zu machen:

<?xml version="1.0" ?>
<root>
 <music id="199" name="FirstName">
  <album albumid="1234" albumname="The King">
   <tracks albumid="1234">
    <track albumid="1234">VALUE1</track>
    <track albumid="1234">VALUE2</track>
   </tracks>
   <information albumid="1234">
    <artist attr="0">Artist (fehlt in meinem array auch!!!</artist>
    <author attr="0">Artist (fehlt in meinem array auch!!!</author>
    <lenght attr="0">Läge würde ich als Attribut vergeben</lenght>
   </information>
  </album>
 </music>
</root>

<?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.='</'.$a['nodeName'].'>';
   }
  }
 else
  {
  # Element ist leer
  $element.=$S.'/>';
  }
 return($element);
 #unset($element,$k,$v);
 }

$a=array(
 'nodeName' =>'root',
 'nodeValues' =>array(
   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' =>'VALUE1'),
            array(
            'nodeName' =>'track',
            'nodeAttr' =>array('albumid'=>'1234'),
            'nodeValues' =>'VALUE2')
            )
          ),
         array(
         'nodeName' =>'information',
         'nodeAttr' =>array(
          'albumid'=>'1234'),
         'nodeValues'=>array(
           array(
           'nodeName' =>'artist',
           'nodeAttr' =>array(
             'attr'=>0),
           'nodeValues'=>'Artist (fehlt in meinem array auch!!!'),
           array(
           'nodeName' =>'author',
           'nodeAttr' =>array(
             'attr'=>0),
           'nodeValues'=>'Artist (fehlt in meinem array auch!!!'),
           array(
           'nodeName' =>'lenght',
           'nodeAttr' =>array(
             'attr'=>0),
           'nodeValues'=>'Länge würde ich als Attribut vergeben')
            )
           )
          )
         )
       )
      )
    )
 );

echo mach_xml($a);
?>

Gruß aus Berlin!
eddi