SimpleXMLElement错误

时间:2016-09-13 21:10:57

标签: php simplexml

尝试从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对象,并将其转储到屏幕上。

我不知道如何纠正这个问题。非常感谢任何帮助。

1 个答案:

答案 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)