无法使用Simple HTML DOM检索直接子元素

时间:2014-10-13 11:15:53

标签: php simple-html-dom

我有一个像这样的html表

<table>
<tbody>
    <tr>
      <td><table>
          <tbody>
            <tr class="prdLi">
              <td rowspan="2" class="prdNo"><span>310.</span></td>
              <td colspan="2" class="prdDe" rowspan="2"><span>Pepsi</span></td>
            </tr>
            <tr class="prdLi">
              <td class="prdAc"><span> 1.5L</span></td>
              <td><span>&nbsp;</span></td>
            </tr>
          </tbody>
        </table></td>
    </tr>
  </tbody>
</table>

表格保存为$ html

我想选择类.prdLi

的子元素

我试过这样:

foreach($html->find('tr.prdLi') as $foo){
   echo $foo;

}

我得到的输出就像这样

<span>310.</span>
<span>Pepsi</span
.
.
.

但我真正想得到的是具有父元素td.like的代码:

<td rowspan="2" class="prdNo"><span>310.</span></td>
<td colspan="2" class="prdDe" rowspan="2"><span>Pepsi</span></td>
.
.
.

请帮帮我

2 个答案:

答案 0 :(得分:1)

由于Simple HTML DOM Parser支持类似选择器的CSS,因此您可以使用'tr.prdLi td'指定td个子tr的子元素prdLi。以下内容应该提供您正在寻找的内容:

$htmlstr = <<<EOD
<table>
<tbody>
    <tr>
      <td><table>
          <tbody>
            <tr class="prdLi">
              <td rowspan="2" class="prdNo"><span>310.</span></td>
              <td colspan="2" class="prdDe" rowspan="2"><span>Pepsi</span></td>
            </tr>
            <tr class="prdLi">
              <td class="prdAc"><span> 1.5L</span></td>
              <td><span>&nbsp;</span></td>
            </tr>
          </tbody>
        </table></td>
    </tr>
  </tbody>
</table>
EOD;

$html = str_get_html($htmlstr);
foreach ($html->find('tr.prdLi td') as $foo) {
    echo $foo . "\n";
}

请注意,在find()主元素上调用simple_html_dom。在您的示例中,结果已受到之前find()的限制。

答案 1 :(得分:1)

什么andy说的是正确的,但直接孩子的css是> *,因此:

foreach($html->find('tr.prdLi > *') as $foo){
   echo $foo . "\n";
}