Php 如何在运行simplexml_load_file()之前检查XML文件是否正常

Php 如何在运行simplexml_load_file()之前检查XML文件是否正常,php,api,simplexml,Php,Api,Simplexml,我使用PHP的simplexml\u load\u file()函数调用一个API,该API根据我发送的时间戳返回更改的结果 因此,API将只返回自我的时间戳以来已更改的结果。我遇到的问题是,如果时间戳太快,并且API没有返回结果,那么它不会返回正确的XML文件,而是只返回一个空白页 这导致了simplexml\u load\u文件的各种问题 这里有一个简单的测试,我可以运行 $xml = 'http://api.rescuegroups.org/rest/?key=CZivWWGD&t

我使用PHP的
simplexml\u load\u file()
函数调用一个API,该API根据我发送的时间戳返回更改的结果

因此,API将只返回自我的时间戳以来已更改的结果。我遇到的问题是,如果时间戳太快,并且API没有返回结果,那么它不会返回正确的XML文件,而是只返回一个空白页

这导致了
simplexml\u load\u文件的各种问题

这里有一个简单的测试,我可以运行

$xml = 'http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1';

$xmlObj = new SimpleXMLElement($xml, NULL, TRUE);
这导致

Warning: SimpleXMLElement::__construct(): http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: parser error : Document is empty in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): ^ in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: parser error : Start tag expected, '<' not found in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Warning: SimpleXMLElement::__construct(): ^ in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php:9 Stack trace: #0 E:\Server\htdocs\labs\freelance\dogAPI\testorg.php(9): SimpleXMLElement->__construct('http://api.resc...', 0, true) #1 {main} thrown in E:\Server\htdocs\labs\freelance\dogAPI\testorg.php on line 9
警告:SimpleXMLElement::\uu构造():http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: 解析器错误:第9行的E:\Server\htdocs\labs\freeloper\dogAPI\testorg.php中的文档为空
警告:SimpleXMLElement::\uuu construct():在第9行的E:\Server\htdocs\labs\freeloper\dogAPI\testorg.php中
警告:SimpleXMLElement::u construct():^位于E:\Server\htdocs\labs\freeloper\dogAPI\testorg.php的第9行
警告:SimpleXMLElement::\uu构造():http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1:1: 分析器错误:应为开始标记,“:

使用libxml_Use_internal_errors()来抑制所有XML错误,然后使用libxml_get_errors()来迭代这些错误

返回SimpleXMLElement类的对象,其属性包含XML文档中保存的数据,如果失败,返回FALSE

因此,抑制错误并检查FALSE以检测何时查询没有按预期进行

$xml = @simplexml_load_file('http://api.rescuegroups.org/rest/?key=CZivWWGD&type=orgs&limit=300&updatedAfter=1361941202&startPage=1');
if(false !== $xml)
{
    // Do anything with xml
}

如果出现错误
@
隐藏它并返回false

使用
文件获取内容()
获取数据,然后检查它,并使用
simplexml\u load\u string()
加载它?以解决原因而不是症状,帮每个人一个忙,联系rescuegroups.org,告诉他们他们的API在应该发送XML响应时没有发送XML响应,例如,它应该返回
,这将抑制任何错误,而不仅仅是解析XML时产生的错误。此外,启用ext/CREAR(不太可能,但仍然有效)时,它将不起作用。更好的选择是使用
libxml\u use\u internal\u errors