2013-05-30 24 views
3

我正在用PHP導入一個帶有SimpleXMLElement的RSS源。我在標題和說明方面遇到問題。出於某種原因,該網站我從放飼料中<![CDATA[...]]>的標題和描述:使用SimpleXMLElement在`<![CDATA [...]]>中讀取文本

<item> 
<title><![CDATA[...title...]]></title> 
<link>...url...</link> 
<description><![CDATA[...title...]]></description> 
<pubDate>...date...</pubDate> 
<guid>...link...</guid> 
</item> 

當我在爲SimpleXMLElement做var_dump(),我獲得(這部分):

[2]=> 
    object(SimpleXMLElement)#5 (5) { 
    ["title"]=> 
    object(SimpleXMLElement)#18 (0) { 
    } 
    ["link"]=> 
    string(95) "...link..." 
    ["description"]=> 
    object(SimpleXMLElement)#19 (0) { 
    } 
    ["pubDate"]=> 
    string(31) "...date..." 
    ["guid"]=> 
    string(48) "...link..." 
    } 

如何獲得中的值<![CDATA[...]]>以從Feed中讀取標題和說明?

回答

10

SimpleXML讀取CDATA節點絕對好。您遇到的唯一問題是print_r,var_dump和類似的函數不能提供SimpleXML對象的精確表示,因爲它們沒有在PHP中完全實現。

如果您運行echo $myNode->description,您會看到CDATA部分的內容。原因在於,當您要求將SimpleXMLElement轉換爲字符串時,它會自動爲您整合所有文本和CDATA內容 - 但在您做之前,它會記住這一區別。

作爲一般情況下,要提取SimpleXML中任何元素或屬性的字符串內容,請將其轉換爲帶有(string)$myNode的字符串。這還可以防止其他問題,例如函數抱怨在預期字符串時獲取對象,或者在保存到會話時無法序列化。

另請參見我之前的回答https://stackoverflow.com/a/13830559/157957

相關問題