尝试从URL创建SimpleXMLElement的新实例时,出现错误Uncaught exception 'Exception' with message 'String could not be parsed as XML'
。
详细说明:
$feed_url = 'https://www.ua.edu/news/feed/';
$the_feed = new SimpleXMLElement( $feed_url, LIBXML_NOCDATA, true );
执行上述代码时,错误会出现在Stage和Prod环境中,但不会出现在Dev中。我比较了Stage和Dev环境之间的xml相关设置,并且只存在轻微的版本差异(Dev是比Stage / Prod更低版本的PHP)。
$feed_url = 'http://hiphopdx.com/rss/news.xml';
$the_feed = new SimpleXMLElement( $feed_url, LIBXML_NOCDATA, true );
在舞台上(无法在Prod中测试此部分),我将$feed_url
变量更改为另一个Feed的网址。一切都按预期工作。将创建一个SimpleXMLElement对象,并将其转储到屏幕上。
我不知道如何纠正这个问题。非常感谢任何帮助。
答案 0 :(得分:0)
我检查了类似问题中引用的所有服务器设置,并且它们都已正确设置。我从来没有弄清楚为什么它不从文件中提取XML。我最终使用的解决方案是使用curl从URL获取XML,使用SimpleXMLELEMENT来处理原始XML。
function produce_XML_object_tree($raw_XML) {
libxml_use_internal_errors(true);
try {
$xmlTree = new SimpleXMLElement($raw_XML);
} catch (Exception $e) {
// Something went wrong.
$error_message = 'SimpleXMLElement threw an exception.';
foreach(libxml_get_errors() as $error_line) {
$error_message .= "\t" . $error_line->message;
}
trigger_error($error_message);
return false;
}
return $xmlTree;
}
$feed_url = 'http://feed.url';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $feed_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($ch);
curl_close($ch);
$the_feed = produce_XML_object_tree($xml)