
[英]Parsing XML in PHP returns SimpleXMLElement Object. What next?
[英]PHP's SimpleXMLElement returns parsing error despite seemingly valid XML
我很难通过XML的SimpleXMLElement正确解析此 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是问题的东西,只是错误消息使它看起来像是这种情况。
是否有人有类似的经验并可以提供帮助?
为了避免出现一些误导和额外路线:
$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(...)
。 PHP内部使用同一层来获取日期,而不管在simplexml_load_file
或file_get_contents
。 这没有伤害,但我想您应该知道。 那么,这份批注清单怎么说? 代码简单:
$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失败或成功。 您无需担心其他任何事情。 如果网址错误,请获取正确的网址。 如果XML 可能损坏,请提交错误报告。 其他所有事情都不需要您真正担心。 只是不要将代码放在一起,您对代码的工作方式一无所知。 在这种情况下,只需阅读手册,了解其工作原理,仔细检查,排除故障,收听PHP错误消息,尤其是将检查引入到您自己的软件中即可处理失败情况。 他们在那里。 为那些设计。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.