我使用PHP的simplexml_load_file()
函数来调用API,该API根据我发送的时间戳返回更改的结果。
因此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 :(得分:4)
使用libxml_use_internal_errors()来抑制所有XML错误,然后使用libxml_get_errors()来迭代它们。
返回类SimpleXMLElement的对象,其属性包含XML文档中保存的数据,或者失败时为FALSE。
因此,抑制错误并检查FALSE以检测查询何时未按预期运行。
答案 1 :(得分: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