PHP
$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>" ;
如果我在Feed网站上有标题和发布日期可用,它不会在输出中显示,它是空白的SimpleXMLElement对象。为什么这种形成与饲料不匹配。
答案 0 :(得分: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>";
如果你想用Curl:
做这个代码$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:为Curl添加了代码
答案 1 :(得分: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);
}