TUTORIEL PHP 
PHP5 : SimpleXML
SimpleXML est une des deux nouvelles extensions de PHP 5 consacrées à XML, et présente une approche du traitement des fichiers XML mettant en avant la simplicité d'utilisation. (22/09/2004)
  1. Modifications de fichiers XML
2. Interopérabilité avec l'extension DOM
3. Codage des caractères
4. Les itérateurs SimpleXML : présentation, Iterator
5. Les itérateurs SimpleXML : RecursiveIterator. Conclusion

(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.

  1. Modifications de fichiers XML
2. Interopérabilité avec l'extension DOM
3. Codage des caractères
4. Les itérateurs SimpleXML : présentation, Iterator
5. Les itérateurs SimpleXML : RecursiveIterator. Conclusion
 
Rédaction JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages