我在通过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);
我已经包含了我目前收到的错误,但是这些行号偶尔也会发生变化(我不确定这是我的行为还是国家气象服务#' 39; s Feed的做法:
SimpleXMLElement::__construct(): Entity: line 107: parser error : Start tag expected, '<' not found
SimpleXMLElement::__construct():
SimpleXMLElement::__construct(): ^
我运行的每个XML解析器/验证器都说它有效,只有一些警告。我没有在这里看到任何表明XML是问题的东西,除了错误消息使它看起来像这样。
有没有人有这样的经历可以提供帮助?
答案 0 :(得分:0)
为了免除一些误导和额外路线:
$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
实在是太过分了。有两种方式:
simplexml_load_string(file_get_contents(...))
实际上只是simplexml_load_file(...)
。无论是在simplexml_load_file
还是file_get_contents
,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错误消息等等,特别是将您自己的软件检查自己处理失败案例。他们在那里。为那些设计。