PHP';s SimpleXMLElement返回解析错误,尽管XML看似有效
我在通过PHP的SimpleXMLElement正确解析XML时遇到了可怕的问题。我得到的错误(下面)看起来像是一个解析错误,但我似乎找不到任何问题。而且,由于这是国家气象局的警报源,我不得不假设其他人正在使用该源并使其正常工作 我已经尝试了以下所有方法和几种变体:PHP';s SimpleXMLElement返回解析错误,尽管XML看似有效,php,xml,xml-parsing,simplexml,weather,Php,Xml,Xml Parsing,Simplexml,Weather,我在通过PHP的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(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
及
及
我已经包括了我目前收到的错误,但是行号偶尔会改变(我不确定这是我做的还是国家气象局的Feed做的):
SimpleXMLElement::\uu construct():实体:第107行:解析器错误:应为开始标记,“为避免一些错误指示和额外路由:
$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
这真是太过分了。以两种方式:
simplexml\u load\u字符串(file\u get\u contents(…)
实际上只是simplexml\u load\u file(…)
。PHP在内部使用相同的层来获取日期,无论是从simplexml\u load\u file
还是file\u get\u contents
中获取日期。不痛,但我想你应该知道
更有害的(在不兼容的意义上)是不能实例化SimpleXMLElement将SimpleXMLElement作为其构造函数的第一个参数传递。这是行不通的。我想知道您是否还没有看到其他错误,您可能认为可以安全地“跳过”这些错误,但实际上,在开发和运行软件时,倾听错误消息是至关重要的(请参阅)
那么,这个咆哮的清单上说了什么?代码简单:
$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错误消息,尤其是在处理故障情况的软件中引入检查。他们在那里。为这些进行设计。您的第三个代码示例对我很有用,$xmlObj=simplexml\u load\u file('http://alerts.weather.gov/cap/us.php?x=0');代码>。是的,它似乎也对我有用。我不确定到底是什么问题,虽然可能是文件在我加载时不完整,假设我这边没有错误(这是一个延伸)。看起来这样做很好,而且我把事情复杂化了。也谢谢你的建议。
SimpleXMLElement::__construct(): Entity: line 107: parser error : Start tag expected, '<' not found
SimpleXMLElement::__construct():
SimpleXMLElement::__construct(): ^
$simpleFeed = new SimpleXMLElement(simplexml_load_string(file_get_contents('http://alerts.weather.gov/cap/us.php?x=0')));
$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))
);
}