PHP domDocument parsing with HTML Table ( PHP Fatal error: Call to a member function getElementsByTagName() on a non-object)
PHP domDocument parsing with HTML Table ( PHP Fatal error: Call to a member function getElementsByTagName() on a non-object)
我有一个 DOMDocument 的孤立问题,日志文件中出现以下消息:
PHP Fatal error: Call to a member function getElementsByTagName() on a non-object
孤立的问题代码如下所示:
$data = "<html><head><title></title></head><body><table id=\"rang-table\"><thead> <tr> <th data-priority=\"2\">Rang</th> <th data-priority=\"1\">Name</th> <th data-priority=\"3\">Punkte</th> </tr> </thead> <tbody> <tr><td>1</td><td>Nadja F.</td><td align=\"right\">-9.44</td></tr><tr><td>2</td><td>Karsten G.</td><td align=\"right\">-2.71</td></tr><tr><td>3</td><td>Bjoern K.</td><td align=\"right\">-1.97</td></tr><tr><td>4</td><td>Stefanie A.</td><td align=\"right\">-0.74</td></tr><tr><td>5</td><td>Christian S.</td><td align=\"right\">1.94</td></tr><tr><td>6</td><td>Rene H.</td><td align=\"right\">2.68</td></tr><tr><td>7</td><td>Boris H.</td><td align=\"right\">10.24</td></tr> </tbody> </table></body></html>";
$dom = new domDocument;
@$dom->loadHTML($data);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(1)->getElementsByTagName('tr');
$betreffzeile = "";
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
$betreffzeile.=$cols[2];
}
echo $betreffzeile;
getElementsByTagName
返回的数组是零索引的,这意味着在这种情况下,$tables[1]
不存在(您在 HTML 中只有一个 table ,并且 table 被称为 $tables[0]
) 因此您需要将 $rows
的定义更改为:
$rows = $tables->item(0)->getElementsByTagName('tr');
你的循环也有错误;您不能像现在这样使用索引来引用 DOMNodelist。您需要将 $betreffzeile
的分配更改为:$betreffzeile.=$cols->item(2)->nodeValue;
希望这对您有所帮助。
明确指出,索引从零开始,现在您只有一个 table,这意味着它将属于 0
:
$tables = $dom->getElementsByTagName('table'); // returns DOMNodeList
$rows = $tables->item(0)->getElementsByTagName('tr'); // point to first element index 0
您似乎正在尝试获取 <tbody>
中的第三个 <td>
值,为什么不直接指向它:
$tbody = $dom->getElementsByTagName('tbody');
$rows = $tbody->item(0)->getElementsByTagName('tr');
$betreffzeile = "";
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
$betreffzeile .= $cols->item(2)->nodeValue . '<br/>';
}
echo $betreffzeile;
我有一个 DOMDocument 的孤立问题,日志文件中出现以下消息:
PHP Fatal error: Call to a member function getElementsByTagName() on a non-object
孤立的问题代码如下所示:
$data = "<html><head><title></title></head><body><table id=\"rang-table\"><thead> <tr> <th data-priority=\"2\">Rang</th> <th data-priority=\"1\">Name</th> <th data-priority=\"3\">Punkte</th> </tr> </thead> <tbody> <tr><td>1</td><td>Nadja F.</td><td align=\"right\">-9.44</td></tr><tr><td>2</td><td>Karsten G.</td><td align=\"right\">-2.71</td></tr><tr><td>3</td><td>Bjoern K.</td><td align=\"right\">-1.97</td></tr><tr><td>4</td><td>Stefanie A.</td><td align=\"right\">-0.74</td></tr><tr><td>5</td><td>Christian S.</td><td align=\"right\">1.94</td></tr><tr><td>6</td><td>Rene H.</td><td align=\"right\">2.68</td></tr><tr><td>7</td><td>Boris H.</td><td align=\"right\">10.24</td></tr> </tbody> </table></body></html>";
$dom = new domDocument;
@$dom->loadHTML($data);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(1)->getElementsByTagName('tr');
$betreffzeile = "";
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
$betreffzeile.=$cols[2];
}
echo $betreffzeile;
getElementsByTagName
返回的数组是零索引的,这意味着在这种情况下,$tables[1]
不存在(您在 HTML 中只有一个 table ,并且 table 被称为 $tables[0]
) 因此您需要将 $rows
的定义更改为:
$rows = $tables->item(0)->getElementsByTagName('tr');
你的循环也有错误;您不能像现在这样使用索引来引用 DOMNodelist。您需要将 $betreffzeile
的分配更改为:$betreffzeile.=$cols->item(2)->nodeValue;
希望这对您有所帮助。
明确指出,索引从零开始,现在您只有一个 table,这意味着它将属于 0
:
$tables = $dom->getElementsByTagName('table'); // returns DOMNodeList
$rows = $tables->item(0)->getElementsByTagName('tr'); // point to first element index 0
您似乎正在尝试获取 <tbody>
中的第三个 <td>
值,为什么不直接指向它:
$tbody = $dom->getElementsByTagName('tbody');
$rows = $tbody->item(0)->getElementsByTagName('tr');
$betreffzeile = "";
foreach ($rows as $row) {
$cols = $row->getElementsByTagName('td');
$betreffzeile .= $cols->item(2)->nodeValue . '<br/>';
}
echo $betreffzeile;