<?php
|
/*---------------------------------------------------------------*/
|
/*
|
Titre : Classe pour générer des fichiers XML
|
|
URL : https://phpsources.net/code_s.php?id=561
|
Auteur : erwan
|
Date édition : 07 Fév 2010
|
Date mise à jour : 22 Oct 2019
|
Rapport de la maj:
|
- fonctionnement du code vérifié
|
*/
|
/*---------------------------------------------------------------*/
|
|
class XML{
|
private $head;
|
private $tree;
|
private $key;
|
private $value;
|
private $attributs;
|
//constructeur
|
public function __construct($key,$value='',$attributs=array()){
|
$this->head='';
|
$this->key=strtolower($key);
|
$this->value=$value;
|
$this->attributs=$attributs;
|
$this->tree=array();
|
}
|
public function setHead($head){
|
$this->head=$head;
|
}
|
//ajout d'un noeud enfant
|
public function addNode(XML $node){
|
$this->tree[]=$node;
|
}
|
//ajout d'un attribut;
|
public function addAttribut($key,$value){
|
$this->attributs[$key]=$value;
|
}
|
public function __toString(){
|
//entete du noeud (utile pour le noeud principal de l'arbre
|
$text=$this->head."\n";
|
//creation de la balise
|
$text.='<'.$this->key;
|
//creation des attributs
|
foreach($this->attributs as $key=>$value){
|
$text.=' '.$key.'="'.$value.'"';
|
}
|
//creation du corps de la balise
|
$text.='>'."\n".$this->value."\n";
|
//creation des noeuds enfants
|
foreach($this->tree as $node){
|
$text.=$node;
|
}
|
//balise de fermeture
|
$text.='</'.$this->key.'>'."\n";
|
//supression des lignes vides
|
$text=preg_replace('`[\n]{2,}`','\n',$text);
|
return $text;
|
}
|
//methode pour faciliter la creation de noeud enfants
|
// exemple d'appel :
|
// $node->addText('test',array('value'=>'valeurDeTest'));
|
// permet de creer un noeud enfant :
|
// <text value="valeurDeTest">test</text>
|
public function __call($name,$args){
|
if(substr($name,0,3)=='add'){
|
$key=substr($name,3);
|
$value=$args[0];
|
if(isset($args[1])){
|
$attributs=$args[1];
|
}else{
|
$attributs=array();
|
}
|
$xml=new XML($key,$value,$attributs);
|
$this->addNode($xml);
|
}else{
|
return false;
|
}
|
}
|
}
|
?>
|
|
|