PHP: Как работать с <! [CDATA [с SimpleXMLElement? - PullRequest
88 голосов
/ 04 июня 2010

Я заметил, что при использовании SimpleXMLElement в документе, содержащем эти теги CDATA, содержимое всегда NULL. Как мне это исправить?

Кроме того, извините за спам о XML здесь. Я пытался заставить работать скрипт на основе XML в течение нескольких часов ...

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

Я попробовал первый удар в Google, если вы ищете "SimpleXMLElement cdata", но это не сработало.

Ответы [ 4 ]

160 голосов
/ 04 июня 2010

Возможно, вы не правильно обращаетесь к нему. Вы можете вывести его напрямую или привести в виде строки. (в этом примере приведение является излишним, так как эхо делает это автоматически)

$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;

Возможно, вам повезет больше с LIBXML_NOCDATA:

$content = simplexml_load_string(
    '<content><![CDATA[Hello, world!]]></content>'
    , null
    , LIBXML_NOCDATA
);
39 голосов
/ 25 марта 2014

LIBXML_NOCDATA является необязательным третьим параметром функции simplexml_load_file(). Это возвращает объект XML со всеми данными CDATA, преобразованными в строки.

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


Исправить CDATA в SimpleXML

12 голосов
/ 24 ноября 2012

Это помогло мне:

echo trim($entry->title);
8 голосов
/ 25 января 2016

Это работает идеально для меня.

$content = simplexml_load_string(
    $raw_xml
    , null
    , LIBXML_NOCDATA
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...