1

私はスイッチ付きのこのプログラムを持っています:

$htmlContent = file_get_contents('http://somesite.com');
$htmlDOM->loadHTML( $htmlContent );
$htmlXPath = new DOMXPath( $htmlDOM );

for($i = 0; $i <= 16; $i++ ) {
    switch($i) {
        case 0:
            $link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/div[2]/div/a')->item(0)->getAttribute('href'));
            break;
        case 1:
            $link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/ul/li/div/a')->item(0)->getAttribute('href'));
            break;
        default:
            $link = utf8_decode($htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/ul/li[' . $i . ']/div/a')->item(0)->getAttribute('href'));
            break;
    }
}

ケース0とケース1の場合、期待どおりに機能しますが、デフォルトでは次のエラーがスローされます。

PHP Fatal error:  Call to a member function getAttribute() on a non-object

$ iが原因で発生することは想像できますが、どうすればこの問題を解決できますか?

手伝ってくれてありがとう!

4

1 に答える 1

1

ほとんどの場合、クエリは何かを見つけることができず、長さがゼロのノードリストを返します。空のリストからノードをフェッチしようとすると、オブジェクトではなくfalseが返されます。

クエリが成功したと想定する代わりに、中間ホルダーを使用して以下を確認します。

$nodes = $htmlXPath->query('/html/body/div[2]/div[2]/div/div/div/div/div[2]/div/a');
if ($nodes->length > 0) {
   $link = $nodes->item(0)->getAttribute('href'));
}
于 2012-01-13T04:24:06.497 に答える