2

Simple HTML Dom を使用して HTML タグ間のテキストを解析しています。この課題に直面するまではすべてうまくいきました。div タグ内のテキストは簡単に解析できますが、2 つの div タグ間のテキストを解析するにはどうすればよいですか。

これは、解析される HTML です。

<div class="album"><b>Album1</b> (1997)</div>
<a href="song11.html" target="_blank">song11</a><br />
<a href="song12.html" target="_blank">song12</a><br />

<div class="album"><b>Album2</b> (1998)</div>
<a href="song21.html" target="_blank">song21</a><br />
<a href="song22.html" target="_blank">song22</a><br />

<div class="album"><b>Album3</b> (1999)</div>
<a href="song31.html" target="_blank">song31</a><br />
<a href="song32.html" target="_blank">song32</a><br />

最初のアルバムのタイトル (Album1)、その年 (1997 年)、および両方の曲とタイトルが 1 つの配列でリンクされている必要があります。次に、2 番目の配列の 2 番目のアルバムと 3 番目の配列の 3 番目のアルバム。

4

1 に答える 1

2

2 つの div ノード間のテキストと考えないでください。div ノードを反復し、それに続く a ノードの一部を含めると考えてください。

$html =<<<EOF
<div class="album"><b>Album1</b> (1997)</div>
<a href="song11.html" target="_blank">song11</a><br />
<a href="song12.html" target="_blank">song12</a><br />
<div class="album"><b>Album2</b> (1998)</div>
<a href="song21.html" target="_blank">song21</a><br />
<a href="song22.html" target="_blank">song22</a><br />
<div class="album"><b>Album3</b> (1999)</div>
<a href="song31.html" target="_blank">song31</a><br />
<a href="song32.html" target="_blank">song32</a><br />
EOF;

require('simple_html_dom.php');
$doc = str_get_html($html);
$albums = array();

foreach($doc->find('div.album') as $div){
  $album = array();
  $album['title'] = $div->find('b', 0)->innertext;
  $album['song1'] = $div->nextSibling()->innertext;
  $albums[] = $album;
}

var_dump($albums);
于 2013-03-27T23:50:29.187 に答える