2012-01-17 11 views
3
function getPage($url) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $result = curl_exec($ch); 
    curl_close($ch); 

    return $result; 
} 

$page = getPage(trim('http://localhost/test/test.html')); 


$dom = new DOMDocument(); 
$dom->loadHTML($page); 
$xp = new DOMXPath($dom); 
$result = $xp->query("//img[@class='wallpaper']"); 

私はクラスwallpaperの画像をすべて見つけようとしています。私はvar_dump($result)にしようとしましたが、それは私に奇妙なobject(DOMNodeList)[3]を与えています。私は最終的に画像のsrcをどうやって取得するのですか?画像のsrcをカールしたHTMLで取得する

答えて

-1

echo $result->getAttribute('src'); 
+1

'$のresult'は' 'のgetAttribute()を持っていません。方法。 – alex

2

$resultを試してみてはDOMNodeListオブジェクトです。

あなたはそれはあなたがまた、配列のように例えば

foreach ($result as $img) { 
    $src = $img->getAttribute('src'); 
} 
+0

@alex誤植をありがとう。ここで周りを飛んでいるいくつかの奇妙なdownvotes – Phil

+0

私はdownvoteを保証するものを見ることができないため、私は+1した。 – alex

+0

こんにちは、ちょっと質問を更新しました。 '$ page'が単純な文字列であれば動作しますが、' $ page'がcURLで書かれたデータからのものであれば動作しません。私は 'result-> length'を0にしています – Michelle

1
それを繰り返すことができ DOMNodeList::item()

if ($result->length > 0) { 
    $first = $result->item(0); 
    $src = $first->getAttribute('src'); 
} 

を使用して、個別の項目にアクセス

$count = $result->length; 

に含まれているどのように多くのアイテムを見つけることができます

DOMNodeListの画像にはでアクセスできますループ。

foreach($result as $img) { 
    echo $img->getAttribute('src'); 
} 

echo $result->item(0)->getAttribute('src')で最初の文字を取得できます。 lengthプロパティが$resultであることを確認して、DOMNodeListにアイテムがあることを確認することができます。フィルの答え@、あなたはまた、代わりにimg要素をつかむあなたのXPathクエリで直接src属性をつかむことができることに加え

2

$srcs = array(); 
$result = $xp->query("//img[@class='wallpaper']/@src"); 
foreach($result as $attr) { 
    $srcs[] = $attr->value; 
} 
+0

特に属性がすべてOPの後にある場合は – Phil

+0

こんにちは、質問を少し更新しました。' $ page'が単純な文字列ならば動作しますが、 '$ page'がcURLで書かれたデータからのものではない。 – Michelle

+1

これは本当に別の質問であるべきです。それが実際にhtml文字列であることを確認する 'var_dump($ page)'だけです。正直なところ、 '$ dom-> loadHTMLFile($ theurl)' –

関連する問題