(Ceci est la seconde partie de ce tutoriel. Il est recommandé
d'avoir déjà lu la
première partie.)
Modifications de fichiers XML
Une fois que le fichier XML a été chargé avec l'une des
fonctions de lecture appropriée (simplexml_load_file()
ou simplexml_load_string()),
vous pouvez exporter à nouveau le contenu XML avec la méthode
asXML(). Cela se fait ainsi
:
<?php
$xml = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<a><b></b><c /></a>
XML;
$splxml = simplexml_load_string($syndic);
file_put_contents('fichier.xml', $ splxml ->asxml());
?>
En ouvrant le fichier 'fichier.xml', vous découvrirez le
contenu suivant :
<?xml version="1.0" encoding="iso-8859-1"?>
<a><b/><c/></a>
Vous
remarquerez que les balises vides, comme B, ont été fusionnées
en
<b/>. SimpleXML assure
un minimum de formatage et de protection des caractères
du fichier qu'il génère. C'est donc une bonne solution pour
écrire de manière sécuritaire un fichier XML qui vient d'être
généré. Analysé puis réécrit par SimpleXML, vous êtes certains
de sa validité.
De plus, SimpleXML permet aussi la manipulation du contenu
du fichier lui-même. En fait les opérateurs d'affectations
habituels sont utilisables pour lire et écrire dans les
balises. Intuitivement, cela donnerait le code suivant :
<?php
$syndic = <<<XML
<?xml version="1.0" encoding="iso-8859-1"?>
<a><b version="1.0" type="classique"></b><c
/></a>
XML;
$entries = simplexml_load_string($syndic);
//Modification de la valeur d'une balise
$entries->b = 'contenu de b';
$entries->c = 'Contenu spécial avec balises <> ';
//Ajout ou modification d'un attribut
$entries->b['langue'] = 'fr';
$entries->b['type'] = 'classique';
//Suppression d'un attribut
Unset($entries->b['version']);
print $entries->asxml();
?>
Vous remarquerez qu'il n'est pas possible d'ajouter ou de
retirer une balise : uniquement de modifier le contenu de
la balise et le de remplacer par un autre texte. Il est
donc possible d'écraser des balises avec une chaîne vide,
mais c'est bien là la seule suppression possible.
<?php
$syndic = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<a><b version="1.0" type="classique"><d/></b><c
/></a>
XML;
$entries = simplexml_load_string($syndic);
//Modification de la valeur d'une balise
$entries->b = 'contenu de b';
print $entries->asxml();
?>
Avec ce scénario, la balise B ne contient plus la balise
D, mais la chaîne 'contenu de b'. En utilisant un chaîne
de texte vide, il est donc possible de vider une balise
de son contenu, et de simplifier l'arbre XML. Mais cela
reste une astuce, et il est possible que les développeurs
de SimpleXML bloquent cette possibilité lors des prochaines
versions.
|
Forum |
|
Réagissez
dans les
forums de JDN Développeurs
|
Dans la pratique, il est plus raisonnable de ne pas essayer
d'ajouter ou de retirer des balises avec SimpleXML. Pour
cela, reportez-vous à l'extension DOM. Si cette fonctionnalité
vous manque, Marcus Boerger et Sterling Hughes sont ouverts
aux propositions pour faire avancer le développement de
cette extension.