0

ページから関連するすべてのURLと画像を抽出して配列に入れようとしています。以下のコードは、最初のペアを数値的に正しい回数だけ出力することを除いて、正常に機能します。XPATHを指定するときに間違いを犯しているのではないかと思いましたが、3つの異なるサイトでテストしたところ、毎回同じ結果になりました。

$dom = new DOMDocument();
$dom->loadHtml( $html );
$xpath = new DOMXPath( $dom );

$items = $xpath->query( "//div[@class=\"row\"]" );

foreach ( $items as $item ) {

$value['url'] = $xpath->query( "//div[@class=\"productImg\"]/a/@href",$item)->item(0)->nodeValue;

$value['img'] = $xpath->query("//div[@class=\"productImg\"]/a/img/@src",$item)->item(0)->nodeValue;

$result[] = $value;


}

print_r($result);

明らかにコードが正しくありませんが、問題のある部分に絞り込むことができませんでした。そして、誰かが正規表現の使用を提案する前に、それは私が通常行うことですが、可能であれば、今はXPATHを使用したいと思います。

4

2 に答える 2

1

に関連するquery("//div[@class=\"productImg\"]/a/img/@src",$item)クエリを実行したいようです$item。あなたはもうすぐそこにいますが、完全ではありません。

クエリは、ドキュメントルートの子孫であり、クエリの残りの部分を満たすノード//divを探すことを意味するところから始まります。転倒する重要な場所は、前述のように、この式がドキュメントルートからのものであるということです。<div>

コンテキストノードを選択するには、コンテキストノードの子孫であるノード(つまり、your )と一致する.ような式を開始する必要があります。.//div<div>$item

于 2010-08-23T19:40:27.053 に答える
0

HTMLがどのように見えるかについてはあまりにも多くの仮定がありますが、すぐに見つけられる問題の1つは、-> item(0)の部分です。その0は、問題の反復を反映する必要があります。

$ itemsが常に数値キーを持っていると仮定します:

foreach($ items as $ key => $ item){
 ..... item)-> item($ key)-> nodeValue;
}
于 2010-08-23T17:07:04.000 に答える