2016-06-18 108 views
0

PHP爲什麼它沒有顯示所有的信息爲XML?

$ch = curl_init() ; 

$url = "http://www.espnfc.com/rss" ; 

curl_setopt($ch, CURLOPT_URL , $url) ; 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$xml = curl_exec($ch); 

curl_close($ch); 

$xmlTree = new simpleXMLElement($xml) ; 

echo "<pre>" ; 
print_r($xmlTree->channel->item[0]) ; 
echo "</pre>" ; 

,如果我去進料部位有標題和出版日期,可用它不輸出表現,它是空白SimpleXMLElement對象。爲什麼這個編隊與飼料不匹配。

回答

0

因爲知道,SimpleXML使用魔法的語法添加的代碼,功能如print_r()var_dump()將不會始終輸出所有可用數據。如果您訪問它們,它們仍然會在那裏。使用SimpleXMLElement::asXML()來獲取元素節點的序列化XML。

$rss = new SimpleXMLElement($xml); 

foreach ($rss->channel->item as $item) { 
    var_dump($item->asXml()); 
} 

這取決於你的PHP版本。較新的版本可能會輸出更多的數據。

您可以添加一個避免它們的參數(它們被轉換爲普通文本節點)。

$rss = new SimpleXMLElement($xml, LIBXML_NOCDATA); 

foreach ($rss->channel->item as $item) { 
    print_r($item); 
} 
0

來自espnfc.com的RSS在其代碼中使用了大量的<![CDATA[。這就是你輸出的問題。我們需要從結果中剝離所有CDATA,然後將其解析爲xml對象。我已經爲你寫了一些代碼,可以做到這一點。

$url = "http://www.espnfc.com/rss" ; 
$content = file_get_contents($url); // I replaced all your curl code with this 
$rm_1 = str_replace("<![CDATA[","",$content); 
$rm_2 = str_replace("]]>","",$rm_1); 
$xmlTree = new simpleXMLElement($rm_2); 
$feed = $xmlTree->channel->item[0]; 

echo "<pre>"; 
print_r($feed); 
echo "</pre>"; 

下面是一個代碼,如果你想與捲曲做到這一點:

$ch = curl_init() ; 

$url = "http://www.espnfc.com/rss" ; 

curl_setopt($ch, CURLOPT_URL , $url) ; 
curl_setopt($ch, CURLOPT_HEADER, false); 
curl_setopt($ch, CURLOPT_TIMEOUT, 15); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

$xml = curl_exec($ch); 

curl_close($ch); 

$rm_1 = str_replace("<![CDATA[","",$xml); 
$rm_2 = str_replace("]]>","",$rm_1); 

$xmlTree = new simpleXMLElement($rm_2) ; 

echo "<pre>" ; 
print_r($xmlTree->channel->item[0]) ; 
echo "</pre>" ; 

編輯1:爲捲曲

+0

請不要只替換CDATA節標記,它們可以包含未轉義的特殊字符。結果可能是無效的/不同的XML。 – ThW

相關問題