使用Simple Html Dom在两个div标签之间获取内容

时间:2013-03-27 15:28:55

标签: php parsing simple-html-dom

我正在使用Simple 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)以及歌曲链接和他们的标题在一个阵列中。然后第二张专辑中的第二张专辑和第三张专辑中的第三张专辑。

1 个答案:

答案 0 :(得分:2)

不要将它视为两个div节点之间的文本,将其视为迭代div节点并包含一些跟随它们的节点:

$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);