连续查找内容

时间:2014-10-26 07:22:56

标签: java html

该行包含

行号 - 姓氏姓氏 - 指导员姓名 - E

</tr>
<tr height=20 style='height:15.0pt'>
<td height=20 class=xl6429100 align=right width=28 style='height:15.0pt;
border-top:none;width:21pt'>row number</td>
<td class=xl8629100 width=19 style='border-top:none;border-left:none;
width:14pt'>&nbsp;</td>
<td class=xl6529100 width=137 style='border-top:none;border-left:none;
width:103pt'>name</td>
<td class=xl6529100 width=92 style='border-top:none;border-left:none;
width:69pt'>surname</td>
<td class=xl7929100 style='border-top:none;border-left:none'>instructor name</td>
<td class=xl8129100 style='border-top:none'>grade</td>

我想从这个html文件中只检索一行来控制我自己的等级。我通过使用java获取html的源代码,但现在我如何才能到达我想要的行?我会先找到姓氏。在这部分表格中,我如何才能达到等级颜色?

这是我的代码;

import java.net.*;
import java.io.*;

public class staj {
    public static void main(String[] args) throws Exception {

    URL staj = new URL("http://www.cs.bilkent.edu.tr/~sekreter/SummerTraining/2014G/CS399.htm");
    BufferedReader in = new BufferedReader(new InputStreamReader(staj.openStream()));

    String inputLine;
    String grade;

    while ((inputLine = in.readLine()) != null){
        if(inputLine.contains(mysurname))   
        //grade = WHAT? 
    }
    in.close(); 
}

而且,是否正在使用java高效且适合此目的?哪种语言会更好?

1 个答案:

答案 0 :(得分:2)

您绝对应该使用Jsoup库从HTML文档中提取所需内容 - http://jsoup.org/

我创建了一个示例代码,演示了从您在说明中提供的表中提取数据的示例:https://gist.github.com/wololock/15f511fd9d7da9770f1d

public static void main(String[] args) throws IOException {
    String url = "http://www.cs.bilkent.edu.tr/~sekreter/SummerTraining/2014G/CS399.htm";
    String username = "Samet";

    Document document = Jsoup.connect(url).get();

    Elements rows = document.select("tr:contains("+username+")");

    for (Element row : rows) {
        System.out.println("---------------");
        System.out.printf("No: %s\n", row.select("td:eq(0)").text());
        System.out.printf("Evaluator: %s\n", row.select("td:eq(4)").text());
        System.out.printf("Status: %s\n", row.select("td:eq(5)").text());
    }
}

看看这个:

document.select("tr:contains("+username+")");

Jsoup允许您使用类似jquery的方法和选择器从html文档中提取数据。在此示例选择器中,您仅提取嵌套元素中包含给定用户名的tr个元素。当您有这些行的列表时,您可以简单地提取数据。我们在这里使用:

row.select("td:eq(n)")

其中:eq(n)表示选择嵌套在tr 中的第n个td元素。这是输出:

---------------
No: 85
Evaluator: Buğra Gedik
Status: E
---------------
No: 105
Evaluator: Çiğdem Gündüz Demir
Status: E