0

XPathクエリが機能していないことを知りたい場合、正しい検証は何でしょうか。

$query_id = $xpath->query('//tr[@class="calendar_row"][@data-eventid]/@data-evenid');
if (!is_null($query_id)) {
    ...
} else {
    echo 'Invalid Query!';
}

上記のコードを使用していますが、クエリで結果が得られなくても何も表示されません。

4

3 に答える 3

3

だから私がこれを理解する方法は、空のリストをチェックしたいということです。DOMXPath::query()についてPHP.netが述べていることは次のとおりです。

指定された XPath 式に一致するすべてのノードを含む DOMNodeList を返します。ノードを返さない式は、空の DOMNodeList を返します。

式の形式が正しくないか、contextnode が無効な場合、DOMXPath::query() は FALSE を返します。

そうは言っても、空の DOMNodeList をチェックする必要があります。これは「Traversable」オブジェクトであるため、否定でチェックしたときに実際には FALSE を返さない場合があります。

代わりに、次のようなものを使用してください。

$query_id_entries = $xpath->query('//tr[@class="calendar_row"][@data-eventid]/@data-evenid');
if ($query_id_entries->length == 0) {
    echo "invalid query";
} else {
    foreach($query_id_entries as $query_id) {
        // ...
    }
    // Or you could do the following.
    // $query_id = $query_id_entries->item(0);
}
于 2012-12-19T15:00:40.123 に答える
1

式の形式が正しくないか、contextnode が無効な場合、DOMXPath::query()は を返しますFALSE。そう、

$query_id = $xpath->query('//tr[@class="calendar_row"][@data-eventid]/@data-evenid');
if (!($query_id)) {
    echo "invalid query";
} else {
    echo 'Valid Query!';
}

このようなことを意味しましたか

于 2012-12-19T07:24:27.470 に答える
1

クエリが結果を生成できない場合でも、何も表示されません

結果を生成できないクエリが多数あります。例は

//employee[hire-date gt current-date()]

もちろん、すべての従業員の雇用日が過去であることをシステムが知ることはできないため、このクエリでは何も返されず、その理由を突き止める必要があります。

しかし、おそらく「採用日」のタイプを間違えたのかもしれません。おそらく、「hireDate」または「@hire-date」であるべきでしたか?この場合、システムがエラーを発見できると期待するかもしれません。答えは、スキーマを認識するクエリ プロセッサを使用し、スキーマについてクエリ プロセッサに伝えることでスキーマ認識を利用する場合 (通常は、クエリ プロローグで "スキーマのインポート" 宣言を使用) が可能であるということです。 .

単純なアドホック クエリにスキーマ認識を使用するのは少し面倒な場合があります。これが、おそらくほとんどの人が気にしない理由です。しかし、何か複雑なものを開発している場合、特にクエリが何も返さない「空白の画面」の問題については、デバッグを容易にするのに本当に役立ちます。光が出るまでそれを見つめる以外に理由を見つける方法はありません。夜明け。

コンパイル時にスキーマを使用してエラーを検出するスキーマ対応クエリ プロセッサの例は、Saxon-EE です。

于 2012-12-19T08:53:19.383 に答える