111 votes

PHP: Comment gérer

J'ai remarqué que lors de l'utilisation d' SimpleXMLElement sur un document qui contient les balises CDATA, le contenu est toujours NULL. Comment puis-je résoudre ce problème?

Aussi, désolé pour le spam sur XML ici. J'ai été d'essayer d'obtenir une base de XML script de travailler pendant plusieurs heures maintenant...

<content><![CDATA[Hello, world!]]></content>

J'ai essayé le premier hit sur Google si vous recherchez "SimpleXMLElement cdata", mais cela ne fonctionne pas.

197voto

Josh Davis Points 12974

Vous n'êtes probablement pas accéder correctement. Vous pouvez la production, directement ou en fonte comme une chaîne de caractères. (dans cet exemple, le casting est superflu, que l'écho automatiquement le fait quand même)

$content = simplexml_load_string(
    '<content><![CDATA[Hello, world!]]></content>'
);
echo (string) $content;

// or with parent element:

$foo = simplexml_load_string(
    '<foo><content><![CDATA[Hello, world!]]></content></foo>'
);
echo (string) $foo->content;

Vous pourriez avoir plus de chance avec LIBXML_NOCDATA:

$content = simplexml_load_string(
    '<content><![CDATA[Hello, world!]]></content>'
    , null
    , LIBXML_NOCDATA
);

59voto

Pradip Kharbuja Points 746

L' LIBXML_NOCDATA est le troisième paramètre optionnel d' simplexml_load_file() fonction. Ceci renvoie à l'objet XML avec toutes les CDATA données converties en chaînes de caractères.

$xml = simplexml_load_file($this->filename, 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";
print_r($xml);
echo "</pre>";


Fix CDATA en SimpleXML

14voto

breez Points 201

Cela a fonctionné pour moi:

echo trim($entry->title);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X