繁体   English   中英

尽管看似有效的XML,PHP的SimpleXMLElement返回解析错误

[英]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')));

确实做得太多了。 有两种方式:

  1. simplexml_load_string(file_get_contents(...))实际上只是simplexml_load_file(...) PHP内部使用同一层来获取日期,而不管在simplexml_load_filefile_get_contents 这没有伤害,但我想您应该知道。
  2. 更多的伤害(在不兼容的意思)是你不能实例化一个SimpleXMLElement传递的SimpleXMLElement作为第一个参数的它的构造器。 那是行不通的。 我想知道您还没有看到其他错误,您可能认为可以安全地“跳过”这些错误,但是在开发和运行软件时侦听错误消息实际上是至关重要的(请参阅如何在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失败或成功。 您无需担心其他任何事情。 如果网址错误,请获取正确的网址。 如果XML 可能损坏,请提交错误报告。 其他所有事情都不需要您真正担心。 只是不要将代码放在一起,您对代码的工作方式一无所知。 在这种情况下,只需阅读手册,了解其工作原理,仔细检查,排除故障,收听PHP错误消息,尤其是将检查引入到您自己的软件中即可处理失败情况。 他们在那里。 为那些设计。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM