【问题标题】:PHP's SimpleXMLElement returns parsing error despite seemingly valid XML尽管 XML 看似有效,但 PHP 的 SimpleXMLElement 返回解析错误
【发布时间】:2014-08-05 16:31:22
【问题描述】:

我很难通过 PHP 的 SimpleXMLElement 正确解析 this XML。我得到的错误(如下)看起来像是解析错误,但我似乎找不到任何问题。而且,由于这是国家气象局的警报提要,我不得不假设其他人正在提取此提要并使其正常工作。

我已经尝试了以下所有方法以及它们的几种变体:

$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));

$simpleFeed = new SimpleXMLElement(simplexml_load_string('http://alerts.weather.gov/cap/us.php?x=0'));

$simpleFeed = new SimpleXMLElement('http://alerts.weather.gov/cap/us.php?x=0', NULL, TRUE);

我已经包含了我目前遇到的错误,但行号偶尔会发生变化(我不确定这是我做的还是国家气象局的 Feed 做的):

SimpleXMLElement::__construct(): Entity: line 107: parser error : Start tag expected, '<' not found
SimpleXMLElement::__construct():  
SimpleXMLElement::__construct(): ^ 

我运行的每个 XML 解析器/验证器都表示它是有效的,但有一些警告。我在这里看不到任何表明 XML 是问题的东西,除了错误消息使它看起来像这样。

有没有人有这样的经验并可以提供帮助?

【问题讨论】:

  • 您的第三个代码示例对我有用,$xmlObj = simplexml_load_file('http://alerts.weather.gov/cap/us.php?x=0'); 也是如此。
  • 是的,它似乎也对我有用。我不确定到底是什么问题,尽管假设我这边没有错误(这是一个延伸),但可能是我加载文件时文件不完整。

标签: php xml xml-parsing simplexml weather


【解决方案1】:

为了避免一些误导和额外的路线:

$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));

真的做得太过分了。两种方式:

  1. simplexml_load_string(file_get_contents(...)) 实际上只是 simplexml_load_file(...)。 PHP 在内部使用相同的层来获取日期,无论来自simplexml_load_filefile_get_contents。不痛,但我认为你应该知道。
  2. 更痛苦(在不兼容的意思中)是你不能实例化一个 SimpleXMLElement 传递 SimpleXMLElement 作为第一个参数它是构造函数。那是行不通的。我想知道您是否还没有看到其他错误,您可能认为可以安全地“跳过”这些错误,但实际上在开发和运行软件时听取错误消息至关重要(请参阅How to get useful error messages in PHP?)。

那么这个咆哮的清单是怎么说的呢?代码简单:

$feedURL = http://alerts.weather.gov/cap/us.php?x=0';
$xml     = simplexml_load_file($feedURL);
if (!$xml) {
    throw new UnexpectedValueException(
        sprintf('failed to open %s', var_export($feedURL, true))
    );
}

这个小代码示例会给你一个 SimpleXMLElement 或者告诉你其他的。您不必争论 XML 是否有效或解析器是否可以处理它。对于您的应用程序的其余部分,它将是相同的。打开 URL 失败或成功。您无需担心其他任何事情。如果 URL 错误,请获取正确的 URL。如果 XML 可能被破坏,请提交错误报告。其他一切都不是您真正需要担心的。只是不要把代码放在一起,你不知道它是如何工作的。在这种情况下,只需阅读手册的工作原理、仔细检查、排除故障、听取 PHP 错误消息,尤其是在您自己的软件中引入检查以处理故障情况。他们在那里。为他们设计。

【讨论】:

  • 看起来这很有效,而且我把事情复杂化了。也感谢您的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
  • 1970-01-01
  • 2019-10-15
相关资源
最近更新 更多