[英]PHP: How to handle <![CDATA[ with SimpleXMLElement?
我注意到在包含這些 CDATA 標簽的文檔上使用SimpleXMLElement
時,內容總是NULL
。 我該如何解決?
另外,很抱歉在這里發送有關 XML 的垃圾郵件。 我一直試圖讓一個基於 XML 的腳本工作幾個小時......
<content><![CDATA[Hello, world!]]></content>
如果您搜索“SimpleXMLElement cdata”,我在 Google 上嘗試了第一次點擊,但沒有成功。
您可能沒有正確訪問它。 您可以直接輸出它或將其轉換為字符串。 (在本例中,強制轉換是多余的,因為無論如何 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
);
LIBXML_NOCDATA
是simplexml_load_file()
函數的可選第三個參數。 這將返回所有 CDATA 數據轉換為字符串的 XML 對象。
$xml = simplexml_load_file($this->filename, 'SimpleXMLElement', LIBXML_NOCDATA);
echo "<pre>";
print_r($xml);
echo "</pre>";
這對我有用:
echo trim($entry->title);
這對我來說很完美。
$content = simplexml_load_string(
$raw_xml
, null
, LIBXML_NOCDATA
);
什么時候使用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!"
}
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.