ho la necessità di creare il file xml da un array o oggetto di n livelli.
Sono riuscito a creare il doc xml ma sono salvati tutti al primo livello, prende l'array di partenza include anche n-livelli
Codice PHP:
class Mioxml
{
private $dom = null;
private $radice = null;
public function __construct ()
{
$this->dom = new DOMDocument('1.0', 'utf8');
$this->radice = $this->dom->createElement('datilog');
}
public function getXML($dati)
{
$this->dom->appendChild($this->radice);
foreach ($dati as $chiave => $valore) // per ogni elemento dell'array o dell'oggetto
{
if (is_array($valore) || (is_object($valore))) // se il valore è un sottoarry (sotto-livello)
{
$sub_array = $valore; // assegnamento, valore è un sottoarray
$this->getXML($sub_array);
} else
{
$valore = (string) $valore;
$chiave = (string) $chiave;
try
{
$elemXML = $this->dom->createElement(utf8_encode($chiave));
$this->radice->appendChild($elemXML);
$testo = $this->dom->createCDATASection(utf8_encode($valore));
$elemXML->appendChild($testo);
} catch (Exception $e)
{
}
}
}
//foglia, ritornano le chiamate ricorsive (svuotando lo stack).
$xml = $this->dom->saveXML(); // restituisce false in caso di fallimento
return ($xml == false ? null : $xml); // restituisce il doc xml o null se fallisce
}
public function setinfoXML($dati)
{
if (!$this->checkdatiInfo($dati)) // se non è un array o oggetto
{
return false; // restituisce false
}
$xml = $this->getXML($dati);
if (empty($xml))
{
return false;
}
$this->info = $xml;
return true;
}
}
Codice PHP:
$array = array('nome' => 'test', 'dati' => array('recapito' => array('via' => 'dante', 'CAP' => 'test', 'super' => array('anni' => '34', '345'))));
$log_obj->setinfoXML($array);
cioè non riesco a a creare l'etichetta 'recapito' e 'super' ovvero
codice HTML:
<recapito>
<via> dante </via>
<cap> test </cap>
<super>
<anni> 34, 345 </anni>
</super>
</recapito>
invece mi esce una cosa cosi:
codice HTML:
<via> dante </via>
<cap> test </cap>
<anni> 34, 345 </anni>