PHP简单的html dom - 无法遍历无用的标记

时间:2014-01-27 15:29:45

标签: php dom simple-html-dom

我正在使用simple_html_dom尝试从看起来像这样的表中获取标题和(可能多次):

    <tr></tr>
    <tr>
    <td class="title">Some title</td>
    </tr>
    <tr>
    <td class="time">11:00</td>
    </tr>
    <tr></tr>
    <tr> 
    <td class="title">Another title</td>
    </tr>
    <tr>
    <td class="time">16:00 22:00</td>
    </tr>
    <tr>
    <td class="time">21:00</td>
    </tr>
    // And so on

我的simple_html_dom目前设置如下:

foreach($html->find('tr') as $film) {

   $title = $film->find('td.title',0)->plaintext;
   $time = $film->find('td.time',0)->plaintext;

   if ($time) { 

     $showtimes .= ' '.$time;
   }

  if ($title) { 

    echo $title

    if (!empty($showtimes)) {

      echo $showtimes;          
    }   
 }

标题可能有重复(可以),任何单个标题可能有多次。

长话短说,我可以到达那里,但它很混乱,我不会得到一个整齐的标题列表,其中包含可以轻松使用的相关时间 - 即转储这一切都进入了数据库。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

第一步是迭代所有td.title。对于其中的每一项,td.time将始终位于以下tr中,因此:

foreach($html->find('td.title') as $td) {
  $title = $td->text();
  $times = array();
  while(($tr = $td->parent->next_sibling()) && ($td = $tr->find('td.time', 0))){
    $times[] = $td->text();
  }
  var_dump($title, $times);
}

答案 1 :(得分:0)

确实是一个令人敬畏的HTML代码:&gt;

尝试:

foreach($html->find('tr td') as $row) {

    if ($row->class == 'title') {
        echo "<br>".$row->plaintext;
    }
    elseif ($row->class == 'time') {
        echo "\t".$row->plaintext;
    }
}

<强>输出

Some title  11:00
Another title   16:00   21:00

您还可以使用在找到class="title"时更改的标记

我希望这会给你一些想法:)