3

このテーブルを JSoup フレームワークで抽出して、コンテンツを「テーブル」配列に保存したいと考えています。最初の tr タグはテーブル ヘッダーです。以下はすべて(含まれていない)内容を説明しています。

<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

4

1 に答える 1

3

ヘッダーのみを選択する方法のサンプルコードを次に示します。

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);どこにありますか。mor情報についてはjsoupのドキュメントを参照してください)fFilenull

  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のドキュメント、特にjsoupセレクターAPIのドキュメントを参照してください。

于 2012-11-25T22:06:32.753 に答える