xml-recursivité-tableau

Mammouth du PHP | 1311 Messages

01 févr. 2006, 21:37

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);
	}

Mammouth du PHP | 1311 Messages

01 févr. 2006, 22:40

si vous avez une solution je suis preneur
mais pour l'instant je vais tenter ma chance du coté de sdo

Mammouth du PHP | 983 Messages

01 févr. 2006, 23:01

C'est quoi le problème?

Mammouth du PHP | 1311 Messages

01 févr. 2006, 23:13

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

ViPHP
fab
ViPHP | 2657 Messages

02 févr. 2006, 00:17

au lieu d'utiliser DOMDocument écrit toi même :p
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 1311 Messages

02 févr. 2006, 17:16

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;
	}