Вот как я получаю элементы первого уровня (в данном случае TD-элементы верхнего уровня в строке таблицы:
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$doc->loadHTML( $tr_element );
$xpath = new DOMXPath( $doc );
$td = $xpath->query("//tr/td[1]")->item(0);
do{
if( $innerHTML = self::DOMinnerHTML( $td ) )
array_push( $arr, $innerHTML );
$td = $td->nextSibling;
} while( $td != null );
$ arr теперь содержит верхние элементы TD, а не вложенные таблицы TD, которые вы получите от
$dom->getElementsByTagName( 'td' );
Функция DOMinnerHTML - это то, что я где-то зацепил, чтобы получить innerHTML элемента / узла:
public static function DOMinnerHTML( $element, $deep=true )
{
$innerHTML = "";
$children = $element->childNodes;
foreach ($children as $child)
{
$tmp_dom = new DOMDocument();
$tmp_dom->appendChild( $tmp_dom->importNode( $child, $deep ) );
$innerHTML.=trim($tmp_dom->saveHTML());
}
return $innerHTML;
}