Android 将特定表解析为字符串数组Jsoup

Android 将特定表解析为字符串数组Jsoup,android,html,kotlin,jsoup,Android,Html,Kotlin,Jsoup,我有一个非常复杂的html,我想用JSoup解析它。我试过几种方法,但没有一种有效。基本上,我想得到第二个表,读取所有行并将其附加到字符串中 我尝试过的 val document = Jsoup.parse(it.data) val tableElements = document.select("table:eq(2) > tbody") for (element in tableElements) {

我有一个非常复杂的html,我想用JSoup解析它。我试过几种方法,但没有一种有效。基本上,我想得到第二个表,读取所有行并将其附加到字符串中

我尝试过的

val document = Jsoup.parse(it.data)

                val tableElements = document.select("table:eq(2) > tbody")
                for (element in tableElements) {
                    val data = element.select("td")
                    try {
                        Timber.i("${data[0].select("small").text()} : ${data[1].select("small").text()}")
                    } catch (e: Exception) {
                    }
                }
我要提取的部分


用户识别号:
34565
学习计划:
信息学
研究类型:
单身汉
学习形式:
全日制、出勤制
标准学习时间:
3.
完成学业所需的学分数:
180
整个研究的注册学分数:
120
在整个学习过程中获得的学分数:
90
您的预期学历:
公元前。
开始学习:
09/01/2017
接纳决议:
未经入学考试就被录取了
研究进展:
登记
完成方式:
未说明
当前融资:
全部由我资助的研究
期末论文题目:
未说明
毕业论文导师:
未说明
学习语言:
斯洛伐克语
卡号:
123456

我认为您也应该选择“tr”元素,并像在“tbody”上迭代一样对它们进行迭代。这是一个Java解决方案,因为我不知道Kotlin语法,但它可能有帮助:

Elements tableElements = doc.select("table").get(1).select("tbody").select("tr");
for (Element element : tableElements) {
    Elements data = element.select("td");
    System.out.println(data.select("small").first().text() +" : "
    + data.select("small").last().text());  
}

这是java代码,可以实现您想要的功能。 可以对图元应用选择器

@Test
public void selectSecondTable() {

    String html = "" +
            "<table></table>" +
            "<table>\n" +
            "  <tbody>\n" +
            "    <tr class=\"\">\n" +
            "      <td class=\"odsazena\" align=\"left\"><small>User's identification number: </small></td>\n" +
            "      <td class=\"odsazena\" align=\"left\"><small>34565</small></td>\n" +
            "    </tr>\n" +
            "  </tbody>\n" +
            "</table>";

    Document doc = Jsoup.parse(html);
    //select tr from second table in document:
    for (Element e : doc.select("table:eq(1) tr")) {
        //for each table row select text from small tag and print to console:
        System.out.println(e.select("small").text());
    }

}
@测试
public void selectSecondTable(){
字符串html=“”+
"" +
“\n”+
“\n”+
“\n”+
“用户的标识号:\n”+
“34565\n”+
“\n”+
“\n”+
"";
Document doc=Jsoup.parse(html);
//从文档中的第二个表中选择tr:
对于(元素e:文件选择(“表:等式(1)tr”)){
//对于每个表格行,从小标记中选择文本并打印到控制台:
System.out.println(e.select(“small”).text();
}
}

我当然会试试。但是,如果该表是文档中的第二个表,我如何选择它呢?您可以使用
.get(index)
来选择标记的“index”外观(第一个是0)。我修改了我的答案,把它放在正确的地方。希望有帮助。当然,还有最后一件事,我是否必须跳过写入嵌套此选项卡的元素?也许您的代码可以只更改
eq(2)
eq(1)
如果您使用表选择器,您不需要考虑包含该表的任何父标记,只要它不是另一个表。通常,HTML as id属性对于每个元素都是唯一的,因此它们对于搜索元素也很有用(在本例中不是这样)。元素从0开始索引,因此要选择第二个表,请使用table:eq(1)