Page 1 sur 1

xml-recursivité-tableau

Posté : 01 févr. 2006, 21:37
par jeff
salut
voici le probeleme qui me preocupe en ce moment
je n'arrive pas a transformer un tableau multidimension en un fichier xml


une autre question je bati mon projet sur MVC, je ne sais pas ou doit se trouver la generatoin du xml du coté de la vue et ou du coté metier????

merci
public function ArraytoXml($part,&$xml=null)
	{
		if(is_null($xml))
			$xml = new DOMDocument('1.0','UTF-8');
		if(is_array($part))
		{
			foreach ($part as $key=>$val)
			{
				if(!is_array($val)){
					echo $key.'--'.$val.'<br>';
					$node=$xml->createElement(utf8_encode($key),$val);
					$newnode=$xml->appendChild($node);
				}
				$this->ArraytoXml($val,$xml);
			}
		}
		
		print_br($xml);
	}

Posté : 01 févr. 2006, 22:40
par jeff
si vous avez une solution je suis preneur
mais pour l'instant je vais tenter ma chance du coté de sdo

Posté : 01 févr. 2006, 23:01
par rami
C'est quoi le problème?

Posté : 01 févr. 2006, 23:13
par jeff
je voudrai transformer ce tableau

Code : Tout sélectionner

["article"]=> array(2) { [0]=> array(6) { ["title"]=> string(11) "fisrt essai" ["xslt"]=> string(11) "essai1.xslt" ["autor"]=> array(2) { [0]=> string(8) "ltruc" [1]=> string(13) "jessai } ["date"]=> string(19) "0000-00-00 00:00:00" ["contenu"]=> string(77) "ce-ci est le premier article ce la va t'il fonctionner " ["img"]=> string(11) "coco/machni" }
en fichier xml du type

Code : Tout sélectionner

<?xml version="1.0" encoding="ISO-8859-15"?> <article> <title>fisrt essai</title> <date>0000-00-00 00:00:00</date> <autor> <nom>jessai</nom> <prenom>ltruc</prenom> </autor> <contenu>ce-ci est le premier article ce la va t'il fonctionner</contenu> <img>coco/machni</img> </artticle>
les cles seraient les noms de balise
mais mon code merde dès le premier creatElement
public function ArraytoXml($part,&$xml=null)
	{
		if(is_null($xml)){
			$xml = new DOMDocument('1.0','ISO-885-15');
			$root = $xml->createElement('articles');
			$xml = $xml->appendChild($root);
		}
		if(is_array($part))
		{
			foreach ($part as $key=>$val)
			{
				if(!is_array($val)){
					echo $key.'--'.$val.'<br>';
					$node=$xml->createElement(utf8_encode($key),$val);
					$newnode=$xml->appendChild($node);
				}
				$this->ArraytoXml($val,$xml);
			}
		}
		
		print_br($xml);
	}
createElement est indefini

Posté : 02 févr. 2006, 00:17
par fab
au lieu d'utiliser DOMDocument écrit toi même :p

Posté : 02 févr. 2006, 17:16
par jeff
oui c'est ce que je vais faire, je voulai pas m'embeter pour refermer la balise

sinon une idée pour ma deuxieme question?
static public function _array2xml($array,$encoding='utf-8',$level=1) {
		if($level==1)
		$xml="<?xml version='1.0' encoding=$encoding ?><root>";
		foreach($array as $key=>$val) {
			$num=is_numeric($key);
			if(!isset($xml))$xml="";
			$num||$xml.="<$key>";

			if(is_array($val)) {
				$subNum=is_numeric(key($val));
				if($subNum) {
					$mergeVal=implode("</$key><$key>",$val);
					$xml.=$mergeVal."</$key>";
					continue;
				}
				$xml.=self::_array2xml($val,'',$level+1);
			} else {
				$xml.=$val;
			}

			list($key,)=explode(' ',$key);
			$num||$xml.="</$key>";
		}
		if($level==1)
		$xml.="</root>";
		return (string)$xml;
	}