2

SQL クエリの結果を HTML テーブルにフォーマットする方法については多くの質問がありますが、私は別の方法で行きたいと思います。ヘッダー行を持つ任意の HTML テーブルを指定して、抽出できるようにしたいと考えています。情報は、SQL (または SQL に似た言語) を使用して 1 つ以上の行から生成されます。言うのは簡単ですが、達成するのは明らかにそう簡単ではありません。

最終的には、HTML を libtidy や JSoup などで適切に解析することを好みますが、API ドキュメントは通常妥当ですが、実際に使用するための例やチュートリアルになると、通常は <title> を抽出する例が見つかります。タグ (これは正規表現で実現できます) には、ライブラリの使用方法の実例はありません。したがって、既存の確立されたライブラリのいずれかの優れたリソースまたはサンプル コードも適切です。

4

1 に答える 1

1

JSoupを使用してテーブルをタプルのリストに変換する単純なコードは次のようになります。

public class Main {
    public static void main(String[] args) throws Exception {
        final String html = 
            "<html><head/><body>" +
                "<table id=\"example\">" +
                    "<tr><td>John</td><td>Doe</td></tr>" +
                    "<tr><td>Michael</td><td>Smith</td>" +
                "</table>" +
            "</body></html>";

        final List<Tuple> tuples = parse (html, "example");
                    //... Here the table is parsed
    }

    private static final List<Tuple> parse(final String html, final String tableId) {
        final List<Tuple> tuples = new LinkedList<Tuple> ();

        final Element table = Jsoup.parse (html).getElementById(tableId);
        final Elements rows = table.getElementsByTag("tr");
        for (final Element row : rows) {
            final Elements children = row.children();
            final int childCount = children.size(); 
            final Tuple tuple = new Tuple (childCount);
            for (final Element child : children) {
                tuple.addColumn (child.text ());
            }
        }

        return tuples;
    }
}

public final class Tuple {
    private final String[] columns;

    private int cursor;

    public Tuple (final int size) {
        columns = new String[size];
        cursor = 0;
    }

    public String getColumn (final int no) {
        return columns[no];
    }

    public void addColumn(final String value) {
        columns[cursor++] = value;
    }
}

これ以降、たとえばH2を使用してメモリ内テーブルを作成し、通常の SQL を使用できます。

于 2012-11-19T00:06:27.357 に答える