我注意到在包含这些CDATA标记的文档上使用SimpleXMLElement
时,内容始终为NULL
。我该如何解决这个问题?
另外,抱歉在这里发布有关XML的垃圾邮件。我一直试图让基于XML的脚本现在工作几个小时......
<content><![CDATA[Hello, world!]]></content>
如果您搜索“SimpleXMLElement cdata”,我尝试了第一次点击Google,但这不起作用。
答案 0 :(得分:156)
您可能无法正确访问它。您可以直接输出或将其转换为字符串。 (在这个例子中,转换是多余的,因为echo无论如何都会自动执行)
$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
);
答案 1 :(得分:38)
LIBXML_NOCDATA
是simplexml_load_file()
函数的可选第三个参数。这将返回XML对象,并将所有CDATA数据转换为字符串。
$xml = simplexml_load_file($this->filename, 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";
print_r($xml);
echo "</pre>";
答案 2 :(得分:12)
这对我有用:
echo trim($entry->title);
答案 3 :(得分:8)
这对我来说非常合适。
$content = simplexml_load_string(
$raw_xml
, null
, LIBXML_NOCDATA
);
答案 4 :(得分:0)
何时使用LIBXML_NOCDATA
?
我在将XML转换为JSON时添加了问题。
$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>");
echo json_encode($xml, true);
/* prints
{
"content": {}
}
*/
访问SimpleXMLElement对象时,它将获取CDATA:
$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>");
echo $xml->content;
/* prints
Hello, world!
*/
使用LIBXML_NOCDATA
很有意义,因为json_encode
不会访问SimpleXMLElement来触发字符串强制转换功能,我猜想是__toString()
等效项。
$xml = simplexml_load_string("<foo><content><![CDATA[Hello, world!]]></content></foo>", null, LIBXML_NOCDATA);
echo json_encode($xml);
/*
{
"content": "Hello, world!"
}
*/