J'ai remarqué que lors de l'utilisation SimpleXMLElement
sur un document contenant ces balises CDATA, le contenu est toujours NULL
. Comment puis-je réparer ça?
Aussi, désolé pour le spam sur XML ici. J'essaie de faire fonctionner un script basé sur XML depuis plusieurs heures maintenant ...
<content><![CDATA[Hello, world!]]></content>
J'ai essayé le premier hit sur Google si vous recherchez "SimpleXMLElement cdata", mais cela n'a pas fonctionné.
Réponses:
Vous n'y accédez probablement pas correctement. Vous pouvez le sortir directement ou le convertir en chaîne. (dans cet exemple, le casting est superflu, car l'écho le fait de toute façon automatiquement)
Vous pourriez avoir plus de chance avec
LIBXML_NOCDATA
:la source
print_r
vous n'y accédez en effet pas correctement. Écrivez le code que vous voulez réellement - probablement avececho
ou avec un(string)
casting, et vous constaterez que le contenu est correct. N'utilisez pas LIBXML_NOCDATA, cela n'est pas pertinent.<anElement>a text node <aChildElement /> <![CDATA a cdata node]]> another text node</anElement>
. Les nœuds CDATA et texte sont de types différents, et SimpleXML le suit afin que vous puissiez récupérer le XML que vous avez mis. Lorsque vous insérez un objet SimpleXML dans un tableau, il jette beaucoup d'informations - nœuds CDATA, commentaires, tout élément non dans l'espace de noms courant (par exemple<someNSPrefix:someElement />
), la position de l'élément enfant dans le texte, etc.LIBXML_NOCDATA
convertit les nœuds CDATA en nœuds de texte, mais ne corrige pas le reste.Le
LIBXML_NOCDATA
troisième paramètre optionnel de lasimplexml_load_file()
fonction. Cela renvoie l'objet XML avec toutes les données CDATA converties en chaînes.Correction de CDATA dans SimpleXML
la source
Cela a fait l'affaire pour moi:
la source
Cela fonctionne parfaitement pour moi.
la source
Quand l'utiliser
LIBXML_NOCDATA
?J'ajoute le problème lors de la transformation de XML en JSON.
Lors de l'accès à l'objet SimpleXMLElement, il obtient le CDATA:
J'ai du sens à utiliser
LIBXML_NOCDATA
carjson_encode
n'accédez pas à SimpleXMLElement pour déclencher la fonction de casting de chaînes, je suppose un__toString()
équivalent.la source