Android 将特定表解析为字符串数组Jsoup
我有一个非常复杂的html,我想用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) {
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)