2017-02-01 6 views
0

イメージのsrcを返す関数が必要です。DOMDocumentで複雑なxpathを使ってimg srcを取得する

function getImgUrl($html, $xpath) { 
    $xpathkram = new DOMXPath(@DOMDocument::loadHTML($html)); 

    $src = $xpathkram->evaluate('string(' . $xpath . '@src)'); 
    return $src; 
} 
$xpath = '//*[@id="watch7-sidebar-modules"]/div[1]/div/div[2]/ul/li/div[2]/a/span/img'; 
$html = file_get_contents("https://www.youtube.com/watch?v=LNBjMRvOB5M"; 

echo getImgUrl($html, $xpath)); 

しかし、それが動作することを拒否し、ライン4でDOMXPath::evaluate(): Invalid expressionを述べ何らかの理由:イメージは、関数に渡されなければならないのxpathで選択する必要があります。

答えて

0

コードに構文エラーがあります。file_get_contents("https://www.youtube.com/watch?v=LNBjMRvOB5M";の後に閉じ括弧を忘れていて、ここでは1つではなく2つの角かっこがあります。echo getImgUrl($html, $xpath));

+0

私は私の問題をより明確にするためにコードを編集しました。これらの構文エラーは処理中に入力されました。 – kevin

0

まず '/ @のSRC' として$のXPathクエリにattribure 'SRC' を追加します。

$xpath = '//*[@id="watch7-sidebar-modules"]/div[1]/div/div[2]/ul/li/div[2]/a/span/img/@src'; 

ここにあなたのミス:

$src = $xpathkram->evaluate('string(' . $xpath . '@src)'); 

あなたが書くもの:

$src = $xpathkram->evaluate($xpath); 

をその結果、受け取るのはDOMNodeListオブジェクトになります。それからテキストを取得する:

$list = getImgUrl($html, $xpath); 

foreach ($list as $item){ 
    var_dump($item->textContent); 
} 
+0

これは修正されましたが、xpathが/ html/..で始まってもまだ動作しません。 例:[link](https://blog.google/topics/google-europe/zaha-hadid-serpentine-galleries-/div/nav/a [2]/figure/picture/img/@ src' – kevin

+0

".//"で表現を開始しようとすると、 – Ans

+0

残念ながら、これは役に立たなかった。 – kevin

関連する問題