在 Android 工作室中解析 HTML table

Parsing an HTML table in Android studio

我正在尝试为一个研究项目处理大量数据。我通过 Jsoup 加载了一个 html 文件,但问题是我需要评估的 table 没有 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>"---" 仅用于此 table 中的显示目的,对我的项目没有任何价值)

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

提前感谢您的帮助:)

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

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);
}