невозможно получить прямые дочерние элементы с помощью 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>
.
.
.

Помогите мне, пожалуйста

0

Решение

Так как 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

Другие решения

То, что говорит Энди, правильно, но CSS для прямого ребенка > *, следовательно:

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

По вопросам рекламы [email protected]