Call to a member function getElementsByTagName() on array при разборе DOMDocument в PHP
Задача: Из HTML кода взять таблицу с определенным классом и извлечь из нее элементы.
Решение: разбор через DOM.
Код (PHP):
<?php
$content = '
<html>
<head></head>
<body>
<table class="Data-A">
<tr>
<th>Number</th>
<th>ID-A</th>
<th>ID-B</th>
<th>TAG</th>
</tr>
<tr>
<td>1</td>
<td>328001</td>
<td>2</td>
<td>ABCSDE</td>
</tr>
<tr>
<td>2</td>
<td>125</td>
<td>1</td>
<td>XDFE</td>
</tr>
</table>
<table class="Data-B">
<tr>
<th>Number</th>
<th>ID-A</th>
<th>ID-B</th>
<th>TAG</th>
</tr>
<tr>
<td>8</td>
<td>328005</td>
<td>2</td>
<td>ABCSDDE</td>
</tr>
<tr>
<td>2</td>
<td>127</td>
<td>1</td>
<td>XDFFE</td>
</tr>
</table>
</body>
</html>
';
function getElementsByClass(&$parentNode, $tagName, $className) {
$nodes = array();
$childNodeList = $parentNode->getElementsByTagName($tagName);
for ($i = 0; $i < $childNodeList->length; $i++) {
$temp = $childNodeList->item($i);
if (stripos($temp->getAttribute('class'), $className) !== false) {
$nodes[]=$temp;
}
}
return $nodes;
}
$domdoc = new DOMDocument();
$domdoc->loadHTML($content);
$domdoc->saveHTML();
// Get table content
$dombody = getElementsByClass($domdoc, 'table', 'Data-A');
// Get th
$th = $dombody->getElementsByTagName('th');
echo var_dump($th);
?>
Ошибка:
Uncaught Error: Call to a member function getElementsByTagName() on array
Когда возникает: Изначально в html коде есть несколько таблиц, я извлекаю таблицу с заданным классом, после я хочу получить из нее часть с th. При вызове getElementsByTagName() в $dombody (извлеченная таблица) я получаю данную ошибку. Вероятно $dombody уже не того формата.
Вопрос: как это можно сделать? Спасибо!
UPD. Вопрос решен. В getElementByClass возвращался массив. Заменил на return $temp и ошибка исчезла.