Je trouve la gestion des fichiers xml assez lourde , trés puissante , mais lourde . Oscar permet donc de simplifier au maximum l'utilisation des fichiers XML.
Pour le moment Oscar offre des méthodes qui simplifient l'usage standard . Pour des fonctionnalités avancées , il faudra attendre , ou créer sa propre classe qui héritera de Oscar_Xml.
Comme d'habitude ,
require_once 'oscar/Oscar_Xml.php'; $xml = new Oscar_Xml($version='1.0',$encodage='UTF-8');
Par défaut la version est 1.0 et l'encodage UTF-8 mais vous pouvez le modifier via le constructeur.
Ici , ce n'est pas un singleton , vous pouvez donc charger plusieurs documents xml en même temps .
Pour créer un nouveau document , nous allons faire appel à la méthode suivante :
$xml->createXml(<directory>=null , <root node>='root');
Vous devrez donc spécifier ou enregistrer votre document xml , et le nom de la balise 'racine'.
Ces deux paramétres sont facultatifs , à condition d'avoir au moins défini le <directory> auparavant, via la méthode :
$xml->set_FileXml(<directory>);
note: le directory doit contenir le chemin vers le fichier xml , mais aussi le nom de ce fichier , exemple :
/var/www/monsite/ficher.xml
Pour travailler sur un document existant , nous allons appeler la méthode suivante :
$xml->loadDocument(<directory>=null);
Ainsi , votre document est prêt à être utilisé , encore une fois , le paramétre <directory> est facultatif , à partir du moment ou il a été spécifié via set_FileXml(<directory>);
Pour retrouver un noeud , sa valeur , et son attribut , on utilisera la méthode suivante :
array = $xml->searchElem(<noeud à trouver>,<attribut du noeud à trouver>);
Cette méthode retourne un tableau associatif , avec tous les nœuds correspondant au nom spécifié en paramètre. Le tableau associatif sera de la forme suivante :
$result = array( array("value"=><valeur du noeud>, "attribut"=><valeur de l'atribut demandé>), array("value"=><valeur du noeud>, "attribut"=><valeur de l'atribut demandé>), ... );
Vous avez aussi la possibilité de retourner votre fichier xml sous forme de chaîne de caractères , comme ceci :
$XMLString = $xml->loadString();
Pour ajouter un noeud , rien de plus simple
$xml->addElem(<nom nouveau noeud>,<valeur nouveau noeud>,<noeud parent>=<à la racine>,<nom de l'attribut>,<valeur de l'attribut>);
Voilà , les paramétres parlent d'eux même , seul le nom du nouveau noeud est obligatoire , le noeud parent est par defaut le noeud racine du document.
note: il faut savoir que tant que vous n'avez pas sauvegardé votre document , ce nouveau noeud ou paramètre , n'est pas écrit dans le fichier xml.
Pas besoin de le supprimer et de le recréer , nous pouvons simplement le mettre à jour comme ceci :
$xml->updateelem(<nom du noeud à modifier>,<nouvelle valeur>=null,<noeud parent>=noeud racine,<attribut>=null,<val de l'attribut>=null);
Simple non ?
Note : attention tout de même , les anciens attributs seront supprimé .. pensez à les récupérer avant si vous souhaitez les garder.
Pour supprimer un noeud , voici la méthode :
$xml->delElem(<noeud à supprimer>,<noeud parent>=à la racine);
Vous devez donc spécifier le nom du noeud à supprimer , et en option , le nom du noeud auquel il appartient ( noeud parent ) qui par defaut est le noeud racine du document xml.
Si l'un des noeuds parent/à supprimer n'est pas trouvé , la suppression est annulé .
Il peut être intéressant d'ajouter un attribut sur un noeud existant voici le code
$xml->addAttribut( <nom de l'attribut>, <valeur de l'attribut>=null, <le noeud auquel il appartient>, <le noeud parent>=null );
Encore une fois , les paramétres sont logiques , on commence par définir le nom de l'attribut à ajouter , puis sa valeur. Enfin ,nous précisons le noeud auquel notre attribut appartient , ainsi que sont noeud parent ( s'il n'est pas précisé , le noeud parent sera la racine du document ).
Note: si le noeud n'existe pas , il ne se passe simplement rien …
Pour modifier un attribut , les paramétres seront exactement les même qu'à l'ajout ..
$xml->updateAttribut( <nom de l'attribut>, <valeur de l'attribut>=null, <le noeud auquel il appartient>, <le noeud parent>=null );
Nous allons finalement voir comment supprimer un attribut :
$xml->deleteAttribut(<nom de l'attribut à supprimer>, <nom du noeud auquel il appartient>, <nom du noeud parent>);
L'enregistrement , permet de prendre réellement en compte vos modifications sur le fichier xml , pour l'enregistrer , on utilisera la méthode suivante :
$xml->saveFile(<directory>=null);
Encore une fois , directory n'est pas obligatoire à partir du moment ou il a été spécifié dans une des méthodes précédentes.