Разбирайте html с помощью PHP и зациклируйте строки и столбцы таблицы?

Я пытаюсь разобрать HTML из loadHTML, но у меня возникли проблемы, мне удалось пропустить все <tr> s в документе, но я не знаю, как прокручивать <td> s в каждой строке.

Это то, что я сделал до сих пор:

 $DOM->loadHTML($url); $rows= $DOM->getElementsByTagName('tr'); for ($i = 0; $i < $rows->length; $i++) { // loop through rows // loop through columns ... } 

Как я могу получить цикл через столбцы в каждой строке?

DOMElement также поддерживает getElementsByTagName :

 $DOM = new DOMDocument(); $DOM->loadHTMLFile("file path or url"); $rows = $DOM->getElementsByTagName("tr"); for ($i = 0; $i < $rows->length; $i++) { $cols = $rows->item($i)->getElementsbyTagName("td"); for ($j = 0; $j < $cols->length; $j++) { echo $cols->item($j)->nodeValue, "\t"; // you can also use DOMElement::textContent // echo $cols->item($j)->textContent, "\t"; } echo "\n"; } 

Будет ли повторная петля работа?

 $DOM->loadHTML($url); $rows= $DOM->getElementsByTagName('tr'); $tds= $DOM->getElementsByTagName('td'); for ($i = 0; $i < $rows->length; $i++) { // loop through columns for ($i = 0; $i < $tds->length; $i++) { // loop through rows } 

}

EDIT. Вам также нужно будет проверить parent node чтобы убедиться, что родительские rows – это tr вы сейчас находитесь. Что-то вроде

 if ($rows == tds->parent_node){ // do whatever } 

Не может быть синтаксически 100% правильным, но концепция звучит.

Используйте DOMXPath для запроса узлов дочернего столбца с относительным запросом xpath, например:

 $xpath = new DOMXPath( $DOM); $rows= $xpath->query('//table/tr'); foreach( $rows as $row) { $cols = $xpath->query( 'td', $row); // Get the <td> elements that are children of this <tr> foreach( $cols as $col) { echo $col->textContent; } } 

Изменить: Чтобы начать с определенных строк и остановить, сохраните свой собственный индекс в строке, изменив, как вы выполняете итерацию по DOMNodeList :

 $xpath = new DOMXPath( $DOM); $rows= $xpath->query('//table/tr'); for( $i = 3, $max = $rows->length - 2; $i < $max, $i++) { $row = $rows->item( $i); $cols = $xpath->query( 'td', $row); foreach( $cols as $col) { echo $col->textContent; } }