我有这个,我想用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”中获取元素
答案 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());
}
}