3

PHP のsimplexml_load_file()関数を使用して、送信したタイムスタンプに基づいて変更された結果を返す 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 ドキュメントが返されます。

この厄介なエラーが何らかの形で発生するのを防ぐ方法を探していますか?

4

2 に答える 2

4

simplexml_load_file :

libxml_use_internal_errors() を使用してすべての XML エラーを抑制し、libxml_get_errors() を使用して後でそれらを反復処理します。

XML ドキュメント内に保持されているデータを含むプロパティを持つクラス SimpleXMLElement のオブジェクトを返します。失敗した場合は FALSE を返します。

したがって、エラーを抑制し、FALSE をチェックして、クエリが期待どおりに進まなかった場合を検出します。

于 2013-02-27T18:14:01.593 に答える
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 を返します

于 2013-02-27T18:14:11.790 に答える