2

我正在使用简单的 HTML Dom 来解析 HTML 标签之间的文本。在我遇到这个挑战之前,一切都很顺利。我可以轻松地解析 div 标签中的文本,但是如何解析两个 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) 以及两首歌曲都与它们的标题链接在一个数组中。然后是第二个数组中的第二张专辑和第三个数组中的第三张专辑。

4

1 回答 1

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 回答