Hallo!
Da du dein Problem nicht klar beschrieben hast, hilft dir vielleicht auch allein die Problembeschreibung (wenn ich dich denn richtig verstanden habe).
1. Dein Array ist nicht ganz in der richtigen Ordnung, wenn man die erwünschte Anzeige bedenkt, weil 1.1.1 nach 1.2 kommt (allerdings halte ich das für einen Tippfehler, weil das XML anders aussieht. Du meinst 1.2.1?
2. Wenn es in der richtigen Ordnung ist, dann ist es doch ganz einfach zu realisieren, oder steh jetzt ich auf dem Schlauch?
Einfach: Für jedes Array-Element öffnest du eine Section und merkst dir sein Level.
Wenn das nächste geöffnet wird, vergleichst du gemerktes und neues Level:
Ist es kleiner wird eine neue Section geöffnet. Ist es gleich oder größer, dann schließt du diese Section und die bereits offene.
d.h
foreach($nodes AS $node) {
extract($node);
if($merke=($level-1)) echo "</section></section>";
elseif($merke=$level) echo "</section>";
// etc. also kann man auch allgemeiner schreiben, jetzt kein bock
echo "<section>
<title>$name</title>
<para>TEXT</para>";
$merke = $level;
}
Das ist an sich nicht so hilfreich, aber der Grundgedanke ist klar, oder?
Er lautet: Merk dir, was offen ist, und guck ob du es schließen musst.
Gruß,
Ruben