使用domDocument统计HTML表格行数时$rows为null的问题
解决DOMDocument统计表格行数时$rows为null的问题
嘿,我一眼就看出问题出在哪啦!你现在的代码里犯了一个典型错误:把DOMElement对象直接传给了substr_count()函数——这个函数是用来处理字符串的,对DOM节点对象完全不适用,所以$rows返回null是必然的结果。
咱们来修正一下代码,用DOMDocument自带的方法正确统计行数:
修正后的完整代码
if(isset($_POST['List']) && $_POST['List'] == true) { $data = file_get_contents('File.php'); $dom = new domDocument; @$dom->loadHTML($data); $dom->preserveWhiteSpace = false; $table = $dom->getElementById('Table'); // 替换错误的substr_count,改用DOM方法获取tr元素集合 $rowNodes = $table->getElementsByTagName('tr'); $rows = $rowNodes->length; // length属性直接返回tr元素的数量 for($x=0;$x<$rows;$x++) { // 这里可以通过$rowNodes->item($x)拿到对应的tr节点,继续处理逻辑 } }
额外优化:避免统计嵌套表格的tr
如果你的表格里还嵌套了其他子表格,上面的方法会把嵌套表格里的<tr>也统计进去。如果只想统计当前表格的直接子行,可以用XPath精准定位:
$xpath = new DOMXPath($dom); // 仅选中id为Table的表格的直接子tr元素 $rows = $xpath->query('//table[@id="Table"]/tr')->length;
这样就能准确得到你想要的表格行数啦!
内容的提问来源于stack exchange,提问作者user9165568
相关产品推荐
相关产品推荐

