在Android studio中解析HTML表

时间:2016-02-07 14:12:22

标签: java android html html-parsing jsoup

我正在尝试为研究项目处理大量数据。我有一个html文件加载到Jsoup,但问题是我需要评估的表没有Id或CLASS。我搜索过堆栈,但我似乎无法找到答案,告诉我如何联系每个<tr>并从<td>获取信息。

<table>
    <tr>
        <td align="center">inf1</td>
        <td align="center">date</td>
        <tdalign="center">time</td>
        <td align="center">group</td>
        <td  align="center">name</td>
        <td align="center">---</td>
        <td align="center">room</td>
        <td align="center">---</td>
        <td align="center">---</td>
        <td> </td>
        <tdalign="center">reason</td>
        <td align="center"> </td>
    </tr> 
</table>

(空<td>"---"仅用于此表中的显示目的,并且对我的项目没有任何价值)

我需要按组排序每个<tr>(以相同的方式构建),并使用链接到其他数据的inf1对它们进行排序,以便在android Studio项目中使用这些数据,它们将以不同的方式显示。 / p>

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

您可以使用Jsoup CSS选择器和实现Comparable的自定义类来保留记录。像这样:

String html = ""
        +"<table>"
        +"    <tr>"
        +"        <td align=\"center\">inf1</td>"
        +"        <td align=\"center\">date</td>"
        +"        <td align=\"center\">time</td>"
        +"        <td align=\"center\">group1</td>"
        +"    </tr> "
        +"</table>"
        +"<table>"
        +"    <tr>"
        +"        <td align=\"center\">inf1</td>"
        +"        <td align=\"center\">date</td>"
        +"        <td align=\"center\">time</td>"
        +"        <td align=\"center\">group0</td>"
        +"    </tr> "
        +"</table>"
        +"<table>"
        +"    <tr>"
        +"        <td align=\"center\">inf2</td>"
        +"        <td align=\"center\">date</td>"
        +"        <td align=\"center\">time</td>"
        +"        <td align=\"center\">group0</td>"
        +"    </tr> "
        +"</table>"
        ;

Document doc = Jsoup.parse(html);
class TableRecord implements Comparable<TableRecord>{
    public String inf = "";
    public String grp = "";

    @Override
    public int compareTo(TableRecord arg0) {
        int cmpGrp = arg0.grp.compareTo(this.grp);
        if (cmpGrp==0){
            return arg0.inf.compareTo(this.inf);
        }
        return cmpGrp;
    }

    @Override
    public String toString(){
        return "grp="+grp+":inf="+inf;
    }
}
List<TableRecord> tableRecords = new ArrayList<>();
Elements trs = doc.select("table tr");
for (Element tr : trs){
    Elements tds = tr.select("td");
    TableRecord tableRecord = new TableRecord();
    tableRecord.inf = tds.get(0).text();
    tableRecord.grp = tds.get(3).text();

    tableRecords.add(tableRecord);
}

Collections.sort(tableRecords);
for (TableRecord tableRecord:tableRecords){
    System.out.println(tableRecord);
}