Newsgroup: it.comp.www.php
Titolo: (molto lungo) aiuto con ricorsione da xml

Salve a tutti,
mi sto inscemunendo con un problema di ricorsione e non riesco a venirne 
proprio fuori... praticamente devo ottenere una lista di questo tipo:
---------------------------------------------------------------------------------------------------------------------------------------------
<ul class="menuNavigazione">
	<li><a href="#">Prima Voce</a></li>
	<li><a href="#" class="continua">Seconda Voce</a>
		<ul>
			<li><a href="#">Prima Sotto Voce</a></li>
			<li><a href="#" class="continua">Seconda Sotto Voce</a>
				<ul>
					<li><a href="#">Prima Sotto Voce</a></li>
					<li><a href="#">Seconda Sotto Voce</a></li>
					<li><a href="#">Terza Sotto Voce</a></li>
				</ul>
			</li>
			<li><a href="#">Terza Sotto Voce</a></li>
		</ul>
	</li>
	<li><a href="#" class="continua">Terza Voce</a>
		<ul>
			<li><a href="#">Prima Sotto Voce</a></li>
			<li><a href="#">Seconda Sotto Voce</a></li>
			<li><a href="#">Terza Sotto Voce</a></li>
		</ul>
	</li>
	<li><a href="#">Quarta Voce</a></li>
	<li><a href="#">Quinta Voce</a></li>
</ul>---------------------------------------------------------------------------------------------------------------------------------------------
mentre ne ottengo una cosi':
---------------------------------------------------------------------------------------------------------------------------------------------
<ul class="menuNavigazione">
 <li>
  <a href="#" title="<h3>Prima Voce</h3>" class="continua">Prima Voce</a>
 <ul>
 <li>
  <a href="sottovoce.php" title="Prima Sotto Voce">Prima Sotto Voce</a>
 </li>
 </ul>
 <ul>
 <li>
  <a href="#" title="Seconda Sotto Voce" class="continua">Seconda Sotto 
Voce</a>
 <ul>
 <li>
  <a href="sottovoce.php" title="Prima Sotto Voce">Prima Sotto Voce</a>
 </li>
 </ul>
 <ul>
 <li>
  <a href="sottovoce.php" title="Seconda Sotto Voce">Seconda Sotto Voce</a>
 </li>
 </ul>
 <ul>
 <li>
  <a href="sottovoce.php" title="Terza Sotto Voce">Terza Sotto Voce</a>
 </li>
 </ul>
 </li>
 </ul>
 <ul>
 <li>
  <a href="sottovoce.php" title="Terza Sotto Voce">Terza Sotto Voce</a>
 </li>
 </ul>
 </li>
</ul>
---------------------------------------------------------------------------------------------------------------------------------------------
il tutto partendo da un xml di questo tipo:
---------------------------------------------------------------------------------------------------------------------------------------------
<menu_item>
 <item>
  <name>Prima Voce</name>
  <menu>Prima Voce</menu>
  <description>Prima Voce</description>
  <item>
   <name>Prima Sotto Voce</name>
   <menu>Prima Sotto Voce</menu>
   <description>Prima Sotto Voce</description>
   <link>sottovoce.php</link>
  </item>
  <item>
   <name>Seconda Sotto Voce</name>
   <menu>Seconda Sotto Voce</menu>
   <description>Seconda Sotto Voce</description>
   <item>
    <name>Prima Sotto Voce</name>
    <menu>Prima Sotto Voce</menu>
    <description>Prima Sotto Voce</description>
    <link>sottovoce.php</link>
   </item>
   <item>
    <name>Seconda Sotto Voce</name>
    <menu>Seconda Sotto Voce</menu>
    <description>Seconda Sotto Voce</description>
    <link>sottovoce.php</link>
   </item>
   <item>
    <name>Terza Sotto Voce</name>
    <menu>Terza Sotto Voce</menu>
    <description>Terza Sotto Voce</description>
    <link>sottovoce.php</link>
   </item>
  </item>
  <item>
   <name>Terza Sotto Voce</name>
   <menu>Terza Sotto Voce</menu>
   <description>Terza Sotto Voce</description>
   <link>sottovoce.php</link>
  </item>
 </item>
</menu_item>
---------------------------------------------------------------------------------------------------------------------------------------------
Il codice da me scritto e' questo:
$mod e' un array che contiene la direcotry dei vari file .xml che verranno 
poi combinati... e MODULES_DIR e' il percorso di dove sono le directory con 
gli .xml dentro...
---------------------------------------------------------------------------------------------------------------------------------------------
 foreach($mod as $k=>$v){
  $xml = simplexml_load_file(MODULES_DIR."/".$k.'/menu.xml');
  $result.=get_tree($xml,MODULES_URL."/".$k);
 }
 $result.="</ul>\n";
 return $result;
}
function get_tree($xml,$baseurl,$sub=0){
 foreach($xml->item as $children){
  if (!$children->menu)
   continue;
  if($sub==1){
   $result.="\t<ul>\n";
   $descr=$children->description;
  }else{
   $descr=$children->description;
  }
  $result .= "\t<li>\n";
  if (isset($children->link)){
   $result .= "\t\t<a href=\"".$baseurl."/".$children->link."\" 
title=\"".$descr."\">".$children->menu."</a>\n";
  } else {
   $result .= "\t\t<a href=\"#\" title=\"".$descr."\" 
class=\"continua\">".$children->menu."</a>\n";
  }
  $result .= get_tree($children,$baseurl,1);
  $result .= "\t</li>\n";
  if($sub==1)
   $result.="\t</ul>\n";
 }
 return $result;
}
---------------------------------------------------------------------------------------------------------------------------------------------
Sta ricorsione mi sta facendo morireee aiutoooo
grazie a tutti quelli che sono arrivati fino qui e scusate il post 
lunghissimo!
Dade

 proprio fuori... 
E se provassi con una trasformazione XSLT? Potresti usare le funzioni 
messe a disposizione dalla libreria XSL (o eventualmente dalla 
Sablotron se sei su PHP 4).
Sul manuale trovi esempi in merito su come muoverti, senza dannarsi con 
eventuali ricorsioni.
--
rob4you

 ha scritto nel messaggio 
news:mn.8d397d75a...@KIEDIMELO.IT...

mmm ho paura di fare pastrocchi... uso gia' smarty e non vorrei usare anche 
xslt...
grazie cmq del consiglio
Ciao
Dade