Android SDKにはXMLのパーサがありますが、HTMLのパーサは含まれていません。
そこで外部ライブラリ(TagSoup)を使ってHTMLをパースする方法を紹介します。
#Android内部でもTagSoupが使われているらしいのですが、SDKからは使えないようになっているようです(非公開クラス)

TagSoupをダウンロードする

http://home.ccil.org/~cowan/XML/tagsoup/からjarファイルをダウンロードし、任意の場所に置く
※確認時はバージョン1.2で行いました。

jarファイルを取り込む

TagSoupを利用したいプロジェクトを右クリックし、[Build Path]-[Add External Archives..]を選択
先ほどダウンロードしたjarファイルを指定してOK

利用までの手順は上記だけです。
具体的な利用例としては下記のようになります。

import java.io.InputStream;
import java.io.InputStreamReader;

import org.ccil.cowan.tagsoup.Parser;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;

public class HtmlReader implements ContentHandler {
    public void parse(InputStream is) {
        Parser parser = new Parser();
        try {
            parser.setContentHandler(this);
            parser.setFeature(Parser.namespacesFeature, false);
            parser.parse(new InputSource(new InputStreamReader(is, "UTF-8")));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

あとはSAXインタフェースでコールバックされるので、コールバック関数内でやりたい処理を追加すればよい(コールバック関数については割愛)
なお、文字コードの自動判別は行われないので、文字化けする場合は自前で文字コードを指定する必要がある(上記例ではUTF-8を指定)
最終更新:2011年05月18日 18:46