neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 7 oct. 2010 à 17:11
Salut,
En fait, avec SimpleXMLElement, c'est tellement simple de manipuler du XML qu'on a tendance à se compliquer la vie...
Il m'a fallu un peu de temps pour trouver la réponse au problème, mais en fait, c'est hyper simple...
Comme tu le montres dans ton exemple, lorsque l'on insère du texte dans un élément, il est automatiquement protégé. C'est à dire que les caractères interdits que sont <, > et & sont automatiquement encodés. Ainsi, < devient < > devient > et enfin, & devient &
Il existe deux type de données textes : CDATA et PCDATA. La seule différence réside dans le fait qu'une donnée PCDATA n'est pas interprétée par l'analyseur XML, contrairement à une donnée CDATA.
La raison d'être des données CDATA est de permettre d'écrire du texte qui ne sera pas analysé et contenant des caractères spéciaux (<, > ou &). C'est tout.
Par défaut, toutes les données sont des PCDATA. Quand SimpleXML encode les données textes, elles ne seront plus analysées, puisque les caractères spéciaux, qui indiquent un début d'analyse (< servant à ouvrir un nouvel élément, & à définir un caractère spécial) ne sont plus interprétables, puisqu'encodés.
En somme, il n'est pas nécessaire, quand on utilise un tel outil, de chercher à y mettre les tags <![CDATA[ et ]]> puisque le contenu ne sera jamais analysé.
Je sais pas si j'ai été clair...
--
Neige
Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 7 oct. 2010 à 17:38
Alors il faut écrire le fichier manuellement.
C'est à dire qu'il faut récupérer la chaîne XML ($xml -> asXml()) et remplacer les chaînes "cdata" encodées par leur équivalent décodé. Ca pourrait ressembler à quelque chose dans ce genre :