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

时间:2019-02-13 16:55:20

标签: android html kotlin jsoup

我有这个,我想用JSoup解析的相当复杂的html。我已经尝试了几种方法,但是都没有用。基本上,我想获取第二个表,并读取所有行并将其附加到字符串。

我尝试过的事情

yourapp://awesomeintent

我要提取的部分

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

现在,到底出了什么问题?从我尝试过的结果来看,代码甚至不让我打印所需的内容,而在当前状态下,它只会跳过for循环。我想要实现的是我想进入第二个表“ table:eq(2)”并在“ tbody”中获取元素

2 个答案:

答案 0 :(得分:0)

我认为您也应该选择“ 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());  
}

答案 1 :(得分:0)

这是执行所需操作的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());
    }

}