2013-02-27 201 views
3

我使用PHP的simplexml_load_file()函数调用API,该API根据我发送的时间戳返回已更改的结果。如何在运行之前检查XML文件是否正常运行simplexml_load_file()

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

这是造成种种的问题simplexml_load_file

下面是一个简单的测试,我可以运行...

$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 

现在,如果我将API传递到有结果的地方,然后返回一个完美的XML文档。

我正在寻找一种方法来防止这种令人讨厌的错误以某种方式发生?

+0

使用'的file_get_contents一个错误()'获取数据,然后检查它,并使用'simplexml_load_string()'加载它? – 2013-02-27 18:12:48

+2

为了治愈原因而不是症状,请大家帮忙,并联系rescuegroups.org,并告诉他们他们的API没有发送XML响应,例如,它应该返回'' – Gordon 2013-02-27 18:50:00

回答

0
$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

+0

这将抑制*任何*错误,而不仅仅是源自解析XML。另外,当ext/scream被启用时(不太可能,但仍然),它将不起作用。更好的选择是使用'libxml_use_internal_errors'。 – Gordon 2013-02-27 18:56:10

4

simplexml_load_file

使用libxml_use_internal_errors(),以抑制所有XML错误,libxml_get_errors(),以在他们之后迭代。

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

因此,抑制错误并检查FALSE以检测查询未按预期时间进行。

相关问题