如何在Flutter中解析HTML指定div的内容,解决RangeError报错
错误原因
你触发范围错误的核心是:代码遍历页面所有<div>元素时,对每一个<div>都直接尝试取出其下class为rn_nummer的第一个元素,但大部分<div>下没有该类元素,返回的空集合访问索引0就会抛出该异常。
正确实现方案
推荐直接用CSS选择器精准定位目标元素,无需遍历所有<div>,效率更高也不会触发空访问错误,示例代码如下:
import 'package:html/parser.dart' as parser; import 'package:html/dom.dart'; // 假设你已经拿到解析后的document对象 List<String> numeros = []; // 直接匹配所有class为rn_nummer的div元素 final targetDivs = document.querySelectorAll('div.rn_nummer'); // 提取所有目标元素的纯文本内容 numeros = targetDivs.map((element) => element.text.trim()).toList();
如果要修复你原来的写法,只需要增加非空判断即可:
List<String> numeros = []; final allDivs = document.getElementsByTagName("div"); for (var div in allDivs) { final rnElements = div.getElementsByClassName("rn_nummer"); // 仅当存在符合条件的元素时才取值 if (rnElements.isNotEmpty) { numeros.add(rnElements.first.innerHtml.trim()); } }
补充说明
- 提取纯文本优先使用
element.text而非innerHtml,可以避免拿到元素内嵌的HTML标签内容,更符合你获取纯数字的需求 - 搭配
.trim()可以去除文本前后多余的换行、空格,结果更干净
内容的提问来源于stack exchange,提问作者user1444393
相关产品推荐
相关产品推荐

