RSS Feed - 无法加载预期的XML Start标记,'<'未找到

时间:2015-12-17 17:58:06

标签: php rss simplexml rss-reader simplexml-load-string

我尝试使用标准的PHP阅读器函数从我的网站上Sotheby's website获取RSS源,该函数使用simplexml_load_file和循环,但它无法正常工作。当我插入此代码时,我得到了一个“预期加载XML开始标记”,'<'找不到' 。错误'

<?php
$url = 'http://apps.shareholder.com/rss/rss.aspx?channels=2908&companyid=BID&sh_auth=1184301877%2E0%2E0%2E42356%2E14434fd9e3fcb0c832c884fe9ff36e31';
libxml_use_internal_errors(true);
$sxe = simplexml_load_string($url);
if ($sxe === false) {
echo "Failed loading XML\n";
foreach(libxml_get_errors() as $error) {
echo "\t", $error->message;
}
}
print_r($rss);
?>

我尝试使用来自this posting的curl,但它只打印一个空的预标记。

这是我正在使用的读者PHP代码...

<?php
$url = "http://apps.shareholder.com/rss/rss.aspx?channels=2908&companyid=BID&sh_auth=1184301877%2E0%2E0%2E42356%2E14434fd9e3fcb0c832c884fe9ff36e31";
$rss = simplexml_load_file($url);
if($rss)
{
$items = $rss->channel->item;
foreach($items as $item)

{
if($i==5) break;    
$title = $item->title;
$link = $item->link;
$published_on = $item->pubDate;
$description = $item->description;?>
<hr>                            
<div class="news-story">
<?php 
echo '<h3><a href="'.$link.'">'.$title.'</a></h3>';
echo '<span class="news-date">('.$published_on.')</span>';
?>

</div>
<?php
$i++;      
}
}
?>

这是我试图从中提取的Sotheby's news RSS feed

任何帮助或建议都会非常有帮助。谢谢!

修改

感谢第四只鸟引用这个Stack question,它在昨晚工作,但是当我今天检查它停止工作时......

<?php
$context  = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
$url = 'http://apps.shareholder.com/rss/rss.aspx?channels=2908&companyid=BID&sh_auth=1184301877%2E0%2E0%2E42356%2E14434fd9e3fcb0c832c884fe9ff36e31';

$xml = file_get_contents($url, false, $context);
$xml = simplexml_load_string($xml);
print_r($xml);
?>

这些是我在MAMP中遇到的一些错误php_error.log:

[2015年12月18日07:46:41 America / New_York] PHP警告:simplexml_load_string():&lt; / html&gt;在(*我的网站根文件夹)

[18-Dec-2015 07:46:41 America / New_York] PHP警告:simplexml_load_string():^ in(*我的站点根文件夹)

[18-Dec-2015 07:46:41 America / New_York] PHP警告:simplexml_load_string():实体:第85行:解析器错误:标记html第2行中的数据提前结束(*我的站点根文件夹)

他们基本上重复了。

2 个答案:

答案 0 :(得分:1)

在您提供的第一个代码块中,您使用的是simplexml_load_string

本手册将第一个参数描述为:

  

格式良好的XML字符串

在您的代码中,您传递的是网址。如果您想使用simplexml_load_string,此问题的答案可能对您有所帮助: Using SimpleXML to load remote URL

在您提供的第二个代码块中,您使用simplexml_load_file

本手册将第一个参数描述为:

  

XML文件的路径

如果我在第二个代码块中尝试代码,它会向我显示来自RSS Feed的数据,它只给我这个PHP通知:

  

PHP注意:未定义的变量:i

答案 1 :(得分:0)

实际上,在解析XML数据时,URL的最后一部分导致它中断。当我从url中删除'&amp; sh_auth = 1184301877%2E0%2E0%2E42356%2E14434fd9e3fcb0c832c884fe9ff36e31'时,我使用simplexml_load_file()发布的初始代码块工作得很好并且从那时起就没有破坏。感谢第四只鸟的帮助!