我正在使用Flutter,并且想使用parser.dart解析HTML
<div class="weather-item now"><!-- now -->
<span class="time">Now</span>
<div class="temp">19.8<span>℃</span>
<small>(23℃)</small>
</div>
<table>
<tr>
<th><i class="icon01" aria-label="true"></i></th>
<td>93%</td>
</tr>
<tr>
<th><i class="icon02" aria-label="true"></i></th>
<td>south 2.2km/h</td>
</tr>
<tr>
<th><i class="icon03" aria-label="true"></i></th>
<td>-</td>
</tr>
</table>
</div>
使用, 导入'package:html / parser.dart';
我想获取这些数据
现在,南纬19.8%,23.93%,每小时2.2公里
我该怎么做?
答案 0 :(得分:2)
由于您使用的是html包,因此可以使用一些html解析和字符串处理(根据需要)来获取所需的数据,这是一个dart示例,您可以像在flutter应用程序中一样使用parseData函数-
main.dart
import 'package:html/parser.dart' show parse;
main(List<String> args) {
parseData();
}
parseData(){
var document = parse("""
<div class="weather-item now"><!-- now -->
<span class="time">Now</span>
<div class="temp">19.8<span>℃</span>
<small>(23℃)</small>
</div>
<table>
<tr>
<th><i class="icon01" aria-label="true"></i></th>
<td>93%</td>
</tr>
<tr>
<th><i class="icon02" aria-label="true"></i></th>
<td>south 2.2km/h</td>
</tr>
<tr>
<th><i class="icon03" aria-label="true"></i></th>
<td>-</td>
</tr>
</table>
</div>
""");
//declaring a list of String to hold all the data.
List<String> data = [];
data.add(document.getElementsByClassName("time")[0].innerHtml);
//declaring variable for temp since we will be using it multiple places
var temp = document.getElementsByClassName("temp")[0];
data.add(temp.innerHtml.substring(0, temp.innerHtml.indexOf("<span>")));
data.add(temp.getElementsByTagName("small")[0].innerHtml.replaceAll(RegExp("[(|)|℃]"), ""));
//We can also do document.getElementsByTagName("td") but I am just being more specific here.
var rows = document.getElementsByTagName("table")[0].getElementsByTagName("td");
//Map elememt to its innerHtml, because we gonna need it.
//Iterate over all the table-data and store it in the data list
rows.map((e) => e.innerHtml).forEach((element) {
if(element != "-"){
data.add(element);
}
});
//print the data to console.
print(data);
}
这是示例输出-
[Now, 19.8, 23, 93%, south 2.2km/h]
希望有帮助!
答案 1 :(得分:0)
This article可能会有所帮助。它专门使用html
包解析器。
按照软件包自述文件中的示例,您可以轻松地获得Document
对象。使用此对象,您可以使用Element
,getElementById
和getElementsByClassName
之类的方法获取特定的DOM getElementsByTagName
。从那里可以获得返回的每个innerHtml
的{{1}}并将所需的输出字符串放在一起。