簡體   English   中英

PHP:如何處理

[英]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_NOCDATAsimplexml_load_file()函數的可選第三個參數。 這將返回所有 CDATA 數據轉換為字符串的 XML 對象。

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


修復 SimpleXML 中的 CDATA

這對我有用:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM