У меня проблема с DOM-объектом php http://php.net/manual/en/class.domdocument.php
Можно ли отображать только содержимое третьего тега и второго тега в этой таблице?
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($html);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');
/*** get all rows from the table ***/
$rows = $tables->item(0)->getElementsByTagName('tr');
/*** loop over the table rows ***/
foreach ($rows as $row)
{
/*** get each column by tag name ***/
$cols = $row->getElementsByTagName('td');
/*** echo the values ***/
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue.'<br />';
echo $cols->item(3)->nodeValue.'<br />';
echo $cols->item(4)->nodeValue.'<br />';
echo $cols->item(5)->nodeValue.'<br />';
echo '<hr />';
}
РЕДАКТИРОВАТЬ:
Я получаю эту ошибку: Неустранимая ошибка: невозможно использовать объект типа DOMNodeList в качестве массива в
<?php
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML('content.html');
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
$xpath = new DOMXPath($dom);
$selected = $xpath->query('//table/tr/td[first()+1]');
echo $selected[0]->nodeValue;
?>
Редактировать2:
<?php
$output = file_get_contents('test.php');
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($output);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');//get all the tables
if($tables->length > 2) { //check there are more than 2
$thirdTable = $tables->item(2);
$cols = $thirdTable->getElementsByTagName('td');
/*** echo the values ***/
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue.'<br />';
echo $cols->item(3)->nodeValue.'<br />';
echo $cols->item(4)->nodeValue.'<br />';
echo $cols->item(5)->nodeValue.'<br />';
echo '<hr />';
}
?>
EDIT3 - этот код отображает только содержимое третьего тега таблицы.Но это также нужно только для отображения содержимого из второго тега tr в третьей таблице.
$html = file_get_contents('content.html');
/*** a new dom object ***/
$dom = new domDocument;
/*** load the html into the object ***/
@$dom->loadHTML($html);
/*** discard white space ***/
$dom->preserveWhiteSpace = false;
/*** the table by its tag name ***/
$tables = $dom->getElementsByTagName('table');
/*** get all rows from the table ***/
$rows = $tables->item(2)->getElementsByTagName('tr')->item(1);
/*** loop over the table rows ***/
foreach ($rows as $row)
{
/*** get each column by tag name ***/
$cols = $row->getElementsByTagName('td');
/*** echo the values ***/
echo $cols->item(0)->nodeValue.'<br />';
echo $cols->item(1)->nodeValue.'<br />';
echo $cols->item(2)->nodeValue.'<br />';
echo $cols->item(3)->nodeValue.'<br />';
echo $cols->item(4)->nodeValue.'<br />';
echo $cols->item(5)->nodeValue.'<br />';
echo '<hr />';
}