php - 在调用其成员函数之前检查 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 元素时会发生致命错误。
解决方案
感谢@Jonathan 的解决方案:
if(!is_null($dom->getElementsByTagName('td')[4])){
$foo_2 = $dom->getElementsByTagName('td')[4]->textContent;
}
推荐阅读
- c++ - 找不到匹配的重载函数错误
- python - 没有完整 json 文件的 Google Cloud 服务帐户身份验证
- javascript - 使 div 中的图像占用始终相同的空间
- angular - 使用正则表达式过滤离子段
- random-forest - 关于运行其预先构建的随机森林算法的 Sagemaker 验证错误
- android - java.lang.ClassCastException: android.support.v7.widget.SearchView 不能转换为 android.view.MenuItem
- javascript - 如何将 RateYo 添加到 Django 项目
- actions-on-google - 在 Cloud Firestore 中读取字符串时不断出现“未定义”
- javascript - 为什么 Javascript 的 Splice 功能不起作用?
- reactjs - 如何在使用 Typescript 的 React Apollo Query 中包含“refetchQueries”选项?