PHP


ある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/


よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2013/10/26 20:12:09
  • 終了:2013/11/02 20:15:04

回答(1件)

id:Cherenkov No.1

Cherenkov回答回数1503ベストアンサー獲得回数4932013/10/26 23:07:42

ポイント300pt

「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/
)

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません