gpt4 book ai didi

java - 如何解析表格第三列的单元格?

转载 作者:行者123 更新时间:2023-11-29 03:52:56 25 4
gpt4 key购买 nike

我正在尝试解析 <table> 的第 3 列的单元格使用 Jsoup。

这是 HTML:

<b><table title="Avgångar:" class="tableMenuCell" cellspacing="0" cellpadding="4" border="0" id="GridViewForecasts" style="color:#333333;width:470px;border-collapse:collapse;">
<tr class="darkblue_pane" style="color:White;font-weight:bold;">
<th scope="col">Linje</th>
<th scope="col">Destination</th>
<th scope="col">Nästa tur (min)</th>
<th scope="col">&nbsp;</th>
<th scope="col">Därefter</th>
<th scope="col">&nbsp;</th>
</tr>
<tr class="white_pane" style="color:#333333;">
<td align="right" style="color:#000000;background-color:#01AEF0;">1</td>
<td align="left">Hovshaga Kurortsv.</td><td align="right">55</td>
<td align="left"></td>
<td align="right">--</td>
<td align="left"></td>

</tr>
<tr class="lightblue_pane" style="color:#284775;">
<td align="right" style="color:#000000;background-color:#01AEF0;">1</td>
<td align="left">Hovshaga via Resecentrum</td><td align="right">21</td>
<td align="left"></td><td align="right">--</td>
<td align="left"></td>
</tr>
<tr class="white_pane" style="color:#333333;">
<td align="right" style="color:#000000;background-color:#01AEF0;">1</td>
<td align="left">Teleborg</td><td align="right">5</td>
<td align="left"></td><td align="right">45</td><td align="left"></td>
</tr>
</table></b>

这是我的代码尝试,它抛出一个 NullPointerException :

 URL url = null;
try {
url = new URL("http://wap.nastabuss.se/its4wap/QueryForm.aspx?hpl=Teleborg+C+(V%C3%A4xj%C3%B6)");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("1");
Document doc = null;
try {
System.out.println("2");
doc = Jsoup.parse(url, 3000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("3");
Element table = doc.select("table[title=Avgångar:]").first();
System.out.println("3");
Iterator<Element> it = table.select("td").iterator();

//we know the third td element is where we wanna start so we call .next twice
it.next();
it.next();
while(it.hasNext()){
// do what ever you want with the td element here
System.out.println("::::::::::"+it.next());
//iterate three times to get to the next td you want. checking after the first
// one to make sure
// we're not at the end of the table.
it.next();
if(!it.hasNext()){
break;
}
it.next();
it.next();
}

一直到第二个System.Out.Println("3");然后卡住了。

最佳答案

这种方法非常困惑,您没有说明 NPE 发生在哪一行,因此很难直接回答您的问题。

除此之外,我建议不要采用困难且容易出错的方式。那样<table>已经有一个 id属性应该在整个文档中是唯一的,只需使用 ID 选择器 #someid .此外,您可以使用索引选择器 :eq(index) 获取第 3 列的单元格。 (注意:它是从零开始的!)。

所以,这几行简单的代码应该可以做到:

Document document = Jsoup.connect("http://wap.nastabuss.se/its4wap/QueryForm.aspx?hpl=Teleborg+C+(V%C3%A4xj%C3%B6)").get();
Elements nextTurns = document.select("#GridViewForecasts td:eq(2)");

for (Element nextTurn : nextTurns) {
System.out.println(nextTurn.text());
}

这里的结果是:

50
30
10
18
3
24

就是这样。

我强烈建议花一些时间正确学习 CSS 选择器语法,因为 Jsoup 是围绕它构建的。

另见:

关于java - 如何解析表格第三列的单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7864433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com