PHP: Как обращаться с <! [CDATA [с помощью SimpleXMLElement?

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

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

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

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

Ответ 1

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

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

Ответ 2

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

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


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

Ответ 3

Это сделало трюк для меня:

echo trim($entry->title);

Ответ 4

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

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