Niveau
..........
En rapport...

Quoi ?

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.

Structure du tableau

Le tabelau se présente comme ceci :

php
$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 :

php
$tableau['nom_du_noeud']['Nom_Du_Noeud_Suivant']['#text']='Valeur du noeud';

Deux valeur du tableau sont !!obligatoire!! :

php
$tableau['_version']='Version du xml' //1.0 par exemple
$tableau['_encoding']='encodage du xml' //ISO-8859-1 par exemple

Code

php
<?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>';
	}
}
?>

Utilsation

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
<?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();