Matthias: SimpleXml Verschachtelte Nodes

Beitrag lesen

Hallo,

ich versuche mich gerade daran, XML mit SimpleXml zu parsen, und hänge nun an einem Punkt. Kann mir hier bitte jemand helfen?

Der kritische XML-String ist:
<para>Vorher <emphasis role="bold">emphasis</emphasis> Nachher</para>

Mein Parser sieht aus wie folgt:

  function RecurseChildren($ParentNode)  
  {  
    global $NodesMissingDefinition,  
           $Global;  
    foreach ( $ParentNode->children() as $Node )  
    {  
      $NodeName       = $Node->getName();    //Name der Current Node  
      $NodeData       = $Node;               //Inhalt der Curret Node  
      $NodeAttributes = $Node->attributes(); //Array mit allen Attributen $NodeAttributes[Attributname] = attributValue  
      $NodeInclude    = "html/node_$NodeName.inc" ;  
      if ( file_exists($NodeInclude) )  
      {  
        include($NodeInclude);  
      } else {  
        RecurseChildren($Node);  
        if ( !in_array($NodeName, $NodesMissingDefinition) )  
        {  
          array_push($NodesMissingDefinition,$NodeName);  
        }  
      }  
    }  
    return;  
  }

Für obiges Beispiel wird als $NodeInclude erst node_para.inc

<?php  
  echo "<p>";  
    echo $NodeData;  
    RecurseChildren($Node);  
  echo "</p>";  
?>

und dann node_emphasis.inc

<?php  
  
  switch ( $NodeAttributes["role"] )  
  {  
    case "bold":  
         $emphasis_class="emphasis_bold"; break;  
    case "underline":  
         $emphasis_class="emphasis_underline"; break;  
    case "italic":  
         $emphasis_class="emphasis_italic"; break;  
    default:  
         $emphasis_class="emphasis_bold"; break;  
  }  
  
  echo "<span class=\"$emphasis_class\">";  
    echo $NodeData;  
    RecurseChildren($Node);  
  echo "</span>";  
?>

eingebunden.

Als Ergebnis hätte ich gerne:
<p>Vorher <span class="bold">emphasis</span> Nachher</p>, erhalte aber: <p>Vorher Nachher <span class="bold">emphasis</span></p>, was mir im Nachhinein auch einleuchtet.

Meine Frage ist nun, kann ich mit SimpleXML diese Verschachtelung richtig auflösen? Habe mir den Kopf zerbrochen aber keine Lösung gefunden, Google-Suchen haben mir auch kein Ergebnis gebracht.

Bisher habe ich immer mit den XML-Parser-Funktionen gearbeitet, wo über ~~~php xml_set_element_handler($XmlParser, "NodeStart", "NodeEnd");
  xml_set_character_data_handler($XmlParser, "NodeData");

  
Vielen Dank.  
  
Gruß  
  
Matthias