Cette classe est le pandant du parceur xml (parseurxml).
Elle permet de passé d'un tabelau à un XML.
Evidement, la structure du tabelau est identique a celle retourné par la classe du parseur.
Le tabelau se présente comme ceci :
$tableau['nom_du_noeud']['#text']='Valeur du noeud'; $tableau['nom_du_noeud']['@nom_de_l_attribut']='Valeur du l\'attribut du noeud';
On peu aussi imbriquer les noeuds :
$tableau['nom_du_noeud']['Nom_Du_Noeud_Suivant']['#text']='Valeur du noeud';
Deux valeur du tableau sont !!obligatoire!! :
$tableau['_version']='Version du xml' //1.0 par exemple $tableau['_encoding']='encodage du xml' //ISO-8859-1 par exemple
<?php class arrayToXml { /* constructeur */ function arrayToXml($arr, $trace=false) { $this->trace=$trace; if (!@$arr['_encoding']) return false; //Encoding $this->xml='<?xml version="'.@$arr['_version'].'" encoding="'.@$arr['_encoding'].'" ?>'; $this->xml.=$this->_Recurs($arr); } function GetXml() { return $this->xml; } function _Recurs($ar,$p='',$k2=false) { $att=''; $val=''; $deb='<'.$p; $fin='</'.$p.'>'; $num=false; foreach($ar as $k => $v) { if (($num==true) && (is_numeric($k))) $val=$val.$fin.$deb; $this->_Showtrace($k); if ($k{0}=='@') { $att.=' '.substr($k,1).'="'.$v.'" '; } else if ($k{0}=='#') { $pattern = '/[^A-Za-z0-9_]*/'; preg_match($pattern, $v, $matches); if (@$matches[0]!='') { $v='<![CDATA['.$v.']]>'; } $val.='>'.$v; } else if ($k{0}=='_') continue; else { $h=$p; if (!is_numeric($k)) $h=$k; $val.=$this->_Recurs($v,$h,is_numeric($k)); if (is_numeric($k)) $num=true; } } if ($k2==true) { $deb=''; $fin=''; } if ($p=='') return $val."\n"; return $deb.(($deb!='')? $att:$att.'>').$val.$fin."\n"; } /*Affiche les echo de debug si activé */ function _Showtrace($d,$pre=false) { if ($pre==true) echo '<pre>'; if ($this->trace==true) { if ($pre==true) { echo date('H:i:s').' - '; print_r ($d); echo '<br />'; } else { echo date('H:i:s').' - '.$d.'<br />'; } } if ($pre==true) echo '</pre>'; } } ?>
Comme toutes les classes, on déclare une nouvelle instance de la classe puis on apelle la fonction GetXml() qui va renvoyé un XML issue du tableau. exemple :
<?php //utlise la classe qui transforme un xml en array pour ecrire le tablau //Voir php:classe:parseurxml pour plus de detail. $x = file_get_contents( 'a.xml' ); $a=new xmlToarray($x,false); $c=$a->getContent(); //ICI commence ce qui nous interesse : //On instancie la classe en lui passant en parametre le tableau $b=new arrayToXml($c); //et on affiche le xml echo $b->GetXml();
Discussion