あるHTMLファイルの途中から下記のようなHTMLが始まります。
HTMLファイルを読み込み、
DIV IDの「hatena」で挟まれている
<ol>内の<li>内に記述されているリンクを連想配列に入れるにはどうすればよいでしょうか?
--------------------------------------
<div id="hatena">
<ol>
<li>
<a href="http://hoge.com/">ほげほげ</a>
<div>hogehogehoge</div>
<em>textext</em>
</li>
<li>
<a href="http://foo.com/">ふーーー</a>
<div>hogehogehoge</div>
<em>textext</em>
</li>
</ol>
</div>
--------------------------------------
上記のアウトプットとして、下記のような感じです。
[0]=>http://hoge.com/
[1]=>http://foo.com/
よろしくお願いいたします。
「HTMLファイルを読み込み」とあったのでローカルのhtmlファイルを読み込むコードを書きました。
hateq.html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> <div id="hatena"> <ol> <li> <a href="http://hoge.com/">ほげほげ</a> <div>hogehogehoge</div> <em>textext</em> </li> <li> <a href="http://foo.com/">ふーーー</a> <div>hogehogehoge</div> <em>textext</em> </li> </ol> </div> </body> </html>
XPathを使ってDOM内を検索します。$urlsの中にURLが入ります。
<?php function pr($var) { echo '<pre>'; print_r($var); echo '</pre>'; } $doc = new DOMDocument(); $doc->loadHTMLFile("hateq.html"); $xpath = new DOMXPath($doc); $query = 'id("hatena")//a'; //$query = 'id("hatena")/ol/li/a'; //これでもよい $links = $xpath->evaluate($query, $doc); $urls = array(); foreach ($links as $link) { array_push($urls, $link->getAttribute('href')); } pr($urls);
結果
Array ( [0] => http://hoge.com/ [1] => http://foo.com/ )