【问题标题】:SimpleXMLElement ErrorSimpleXMLElement 错误
【发布时间】:2016-09-13 21:10:56
【问题描述】:

尝试从 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 是 PHP 的一个比 Stage/Prod 稍旧的版本)。

$feed_url = 'http://hiphopdx.com/rss/news.xml';
$the_feed = new SimpleXMLElement( $feed_url, LIBXML_NOCDATA, true );

在阶段(无法在 Prod 中测试此部分),我将 $feed_url 变量更改为另一个提要的 URL。一切都按预期工作。一个 SimpleXMLElement 对象被创建并且可以被转储到屏幕上。

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

【问题讨论】:

  • 你在哪里设置$feed_url?第一行是否应该将 URL 字符串分配给 $feed_url 而不是 $the_feed
  • 尝试使用file_get_contents($feed_url);,看看是不是无法访问网址的问题。
  • 使用error_reporting(E_ALL);启用完整警告。
  • @Barmar 这是一个错字。第一行将其分配给代码中的 $feed_url。我将在我的问题中纠正这一点。谢谢。
  • 检查您的allow_url_fopen 设置。

标签: php simplexml


【解决方案1】:

我检查了类似问题中引用的所有服务器设置,它们都已正确设置。我从来没有弄清楚为什么它没有从文件中提取 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)

【讨论】:

    猜你喜欢
    • 2015-09-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多