我正在使用此代码
<?php
$feedUrl = 'http://www.infoextractor.org/upfiles/songlinks.txt.xml';
$rawFeed = file_get_contents($feedUrl);
$viewfile = new SimpleXmlElement($rawFeed);
foreach ($viewfile->channel->item as $viewfileinfo):
$title=$viewfileinfo->title;
echo " <span>",$title,"</span> ";
endforeach;
?>
从以下链接中获取所有标题 - http://www.infoextractor.org/upfiles/songlinks.txt.xml
它上周正在运行,但现在它出现了&#34; Exception thrown String无法解析为XML&#34;。
上周减少了8个条目并且它正在运行,我已经删除它们以查看是否存在问题,但它仍然引发异常,可能xml文件中的某些内容生成的方式不同?
答案 0 :(得分:0)
该异常会告诉您确切的错误:Feed网址有时会返回格式错误的XML。这可能是由于Feed中用户生成的内容有时具有非法的XML字符,例如&
或<
。该XML Feed的所有者应该转义所有用户生成的内容。
您可以尝试解析内容并“修复”它,但如果没有SimpleXml,这将是一种痛苦。一个更简单的解决方案是等待一段时间,直到用户生成的带有违规字符的内容从Feed中循环出来。
请注意,与HTML解析器不同,符合标准的XML解析器必需抛出异常并停止解析无效输入。
答案 1 :(得分:0)
您的代码缺少正确的错误处理:
$rawFeed = file_get_contents($feedUrl);
这里有不同类型的错误,你没有处理:
file_get_contents
失败并返回FALSE
。你必须检查一下,例如
if ($rawFeed === FALSE) {
throw new RuntimeException(
'Deal with it: Unable to retrieve %s',
$feedUrl
);
}
file_get_contents
返回非(有效)XML的内容。那就是你需要捕获创建 SimpleXmlElement 的例外:
try {
$viewfile = new SimpleXmlElement($rawFeed);
} catch (Exception $e) {
throw new RuntimeException('Deal with it: ' . $e->getMessage(), 0, $e);
}
在任何情况下,您都需要自己进行错误处理。你不能指望一切都在神奇地运作。实际情况恰恰相反,设计失败。特别是在处理远程资源时。