「HTMLをパースする」の編集履歴(バックアップ)一覧はこちら
「HTMLをパースする」(2011/05/18 (水) 18:46:59) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
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
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を指定)