首页 > 解决方案 > 在调用其成员函数之前检查 DOMnode 是否存在

问题描述

在解析一个大的 HTML 文件时,我收到了这个致命错误:

致命错误:未捕获的错误:在 null 上调用成员函数 getElementsByTagName()

当我的脚本尝试对表中不存在的元素使用 DOMnode 成员函数时,就会出现问题。这里有一小段代码演示了这个问题:

<?php
$html = "
<table>
  <tr>
    <td>Foo 0</td>
    <td>Bar 0</td>
  </tr>
  <tr>
    <td>Foo 1</td>
    <td>Bar 1</td>
  </tr>
</table>
";

$dom = new domDocument;
$dom->loadHTML($html);

// Ok
$foo_0 = $dom->getElementsByTagName('td')[0]->textContent;
$bar_0 = $dom->getElementsByTagName('td')[1]->textContent;

// Ok
$foo_1 = $dom->getElementsByTagName('td')[2]->textContent;
$bar_1 = $dom->getElementsByTagName('td')[3]->textContent;

// No ok -> How to check if it exists ?
$foo_2 = $dom->getElementsByTagName('td')[4]->textContent;

?>

当脚本尝试访问第 4 个 td 元素时会发生致命错误。

标签: phpdomhtml-parsing

解决方案


感谢@Jonathan 的解决方案:

if(!is_null($dom->getElementsByTagName('td')[4])){
  $foo_2 = $dom->getElementsByTagName('td')[4]->textContent;
}

推荐阅读