2012-11-24 120 views
2

我想用JSoup框架提取此表以将内容保存到“表”数组中。第一个tr标签是表头。所有以下内容(未包含)描述内容。从JSoup中提取数据表

<table style=h2 width=100% cellspacing="0" cellpadding="4" border="1" bgColor="#FFFFFF"> 
<tr> 
<td align="left" bgcolor="#9999FF" > 
<!-- 0 --> 
Kl. 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 3 --> 
Std. 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 4 --> 
Lehrer 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 5 --> 
Fach 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 6 --> 
Raum 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 7 --> 
VLehrer 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 8 --> 
VFach 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 9 --> 
VRaum 
</td> 
<td align="left" bgcolor="#9999FF" > 
<!-- 13 --> 
Info 
</td> 
</tr> 
<tr> 
<!-- 1 0 --> 
<td align="left" bgcolor="#FFFFFF" > 
&nbsp; 
</td> 
<!-- 1 3 --> 
<td align="left" bgcolor="#FFFFFF" > 
4 
</td> 
<!-- 1 4 --> 
<td align="left" bgcolor="#FFFFFF" > 
Méta 
</td> 
<!-- 1 5 --> 
<td align="left" bgcolor="#FFFFFF" > 
HU 
</td> 
<!-- 1 6 --> 
<td align="left" bgcolor="#FFFFFF" > 
&nbsp; 
</td> 
<!-- 1 7 --> 
<td align="left" bgcolor="#FFFFFF" > 
Shne 
</td> 
<!-- 1 8 --> 
<td align="left" bgcolor="#FFFFFF" > 
&nbsp; 
</td> 
<!-- 1 9 --> 
<td align="left" bgcolor="#FFFFFF" > 
&nbsp; 
</td> 
<!-- 1 13 --> 
<td align="left" bgcolor="#FFFFFF" > 
&nbsp; 
</td> 
</tr> 

我已经测试了一个和其他一些人,但我并没有到达他们为我工作: Using JSoup To Extract HTML Table Contents

+0

你能解释'table-Array'有点更详细吗? – ollo

回答

2

下面是一些示例代码,你如何选择只有标题:

Element tableHeader = doc.select("tr").first(); 


for(Element element : tableHeader.children()) 
{ 
    // Here you can do something with each element 
    System.out.println(element.text()); 
} 

你得到Document由...

  1. 解析文件Document doc = Jsoup.parse(f, null);(其中f是铁道部的相关信息的Filenull的字符集,请参阅jsoup文档)

  2. 解析网站Document doc = Jsoup.connect("http://your.url.here").get();(千万不要错过http://

输出:

Kl. 
Std. 
Lehrer 
Fach 
Raum 
VLehrer 
VFach 
VRaum 
Info 

现在,如果你需要一个数组(或更好的List)的所有条目,你可以创建其中每一条目的所有信息存储在一个新的类。接下来,通过jsoup解析Html,并填充该类的所有字段以及将其添加到列表中。

// Note: all values are strings - you'll need to use better types (int, enum whatever) here. But for an example its enough. 
public class Entry 
{ 
    private String klasse; 
    private String stunde; 
    private String lehrer; 
    private String fach; 
    private String raum; 
    private String vLehrer; 
    private String vFach; 
    private String vRaum; 
    private String info; 


    // constructor(s) and getter/setter 

    /* 
    * Btw. it's a good idea using two constructors here: one with all arguments and one empty. So you can create a new instance without knowing any data and add it with setter-methods afterwards. 
    */ 
} 

接下来的代码至极填充您的输入(包括它们的存储列表。):

List<Entry> entries = new ArrayList<>();  // All entries are saved here 
boolean firstSkipped = false;     // Used to skip first 'tr' tag 


for(Element element : doc.select("tr"))  // Select all 'tr' tags from document 
{ 
    // Skip the first 'tr' tag since it's the header 
    if(!firstSkipped) 
    { 
     firstSkipped = true; 
     continue; 
    } 

    int index = 0;        // Instead of index you can use 0, 1, 2, ... 
    Entry tableEntry = new Entry(); 
    Elements td = element.select("td");   // Select all 'td' tags of the 'tr' 

    // Fill your entry 
    tableEntry.setKlasse(td.get(index++).text()); 
    tableEntry.setStunde(td.get(index++).text()); 
    tableEntry.setLehrer(td.get(index++).text()); 
    tableEntry.setFach(td.get(index++).text()); 
    tableEntry.setRaum(td.get(index++).text()); 
    tableEntry.setvLehrer(td.get(index++).text()); 
    tableEntry.setvFach(td.get(index++).text()); 
    tableEntry.setInfo(td.get(index++).text()); 

    entries.add(tableEntry);     // Finally add it to the list 
} 

如果您使用的HTML代码的第一篇文章,你会得到这样的输出:

[Entry{klasse= , stunde=4, lehrer=Méta, fach=HU, raum= , vLehrer=Shne, vFach= , vRaum=null, info= }] 

注:我简单地使用System.out.println(entries);。所以输出的格式是从toString()方法Entry


请参阅Jsoup documentation,尤其是一个jsoup selector api

+0

非常感谢您的工作:)我会在接下来的几天内测试它。 – Niklas

+0

它的工作原理,我想要它! – Niklas