web-dev-qa-db-fra.com

PHP: Comment gérer <! [CDATA [avec SimpleXMLElement?

J'ai remarqué que lorsque vous utilisez SimpleXMLElement sur un document contenant ces balises CDATA, le contenu est toujours NULL. Comment puis-je réparer ça?

Aussi, désolé pour le spamming à propos de 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 coup sur Google si vous recherchez "SimpleXMLElement cdata", mais cela n'a pas fonctionné.

92
Angelo

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 echo le fait automatiquement 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
);
168
Josh Davis

Le LIBXML_NOCDATA Est le troisième paramètre facultatif de la fonction simplexml_load_file(). Cela renvoie l'objet XML avec toutes les données CDATA converties en chaînes.

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


Fix CDATA in SimpleXML

42
Pradip Kharbuja

Cela a fait le tour pour moi:

echo trim($entry->title);
13
breez

Cela fonctionne parfaitement pour moi.

$content = simplexml_load_string(
    $raw_xml
    , null
    , LIBXML_NOCDATA
);
8
vijayrana