スポンサーサイト

--年--月--日 --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

XMLを読み込む

2011年02月13日 12:22

RSSフィードとかでもそうだけど
XMLを利用する場面は多い
ということで、使い方調べてみた。

XMLパーサーには、3種類あるみたい。
・DOM
わかりやすいコードを書けるし、実装も比較的簡単。でも、メモリ上にすべてのデータを持ってきて解析するので、メモリが少ない携帯端末とかで使うには致命的。Javaのコードをそのまま流用できる。
・SAX
こちらもJavaのコードをそのまま流量できる。でも、複雑なXMLの解析になると、コードも複雑化してバグの発生も多くなりそう。
・XMLプル・パーサー
JavaのStAX API をサポートしていないけど、その代用品。XMLを最後まで読む必要がない場合とかは、解析を途中で停止させることも出来る。パフォーマンスの面でメリットが多く、実装の面でも使いやすい。
http://www.ibm.com/developerworks/jp/xml/library/x-android/
を要約したものだけど・・・

SAXの知識とかも全然ないし、Androidから初めてやる人には
XMLプル・パーサーが良さそう。DOMは論外っぽいし。
DOM,SAXでXML解析したい人は上記リンクを参照。
(XMへの出力を知りたいって人も上参照)

【概要】
・ここでは、XML形式で作られているRSSフィードを解析することにする。
解析対象のRSSは、 FC2インフォメーションブログの
http://blog.fc2.com/info/?xml を解析する。

・RSSはどういう作りになっているかは
http://www.kanzaki.com/docs/sw/rss.html
を見るとわかると思う。

1.準備
・RSSリーダーで必要となってくるのは、恐らく<item>~</item>要素の中身だと思う。
 item要素の中身が1記事のセットなのでこれをまとめるクラスをあらかじめ作っておく。
 (後述SampleのItemクラス参照)

・URLからRSSのストリームを返すメソッドを作っとく。インターネットからの取得は、ここで少し説明してあります。
 (後述SampleのgetURLStreamメソッドも参照)

 ここらへんは、特にXML解析とは関係薄いのでやりやすいように修正してください。

2.XMLプル・パーサーのインスタンス取得
方法1
方法2 とインスタンスの取得方法は、2種類あるが通常は方法1で良いと思う。
方法1.は方法2で作るときのデフォルト設定みたいなものだと思うし、
1で実現できない機能が出てきたら方法2の利用を検討するぐらいでいいのかな?

2.インスタンスにXML情報を登録
これを使う。
・inputStream
XMLストリームを指定する。
・inputEncoding
エンコードを指定する。nullにすると、ストリームのデフォルト値が使われるみたい。nullで指定しても問題はなさそう?

ファイルからXMLを読みたい場合は、 を利用する。使い方は、大体同じ。

3.XML解析
ここらへんは、文章で説明されるより、Sampleで見たほうがわかりやすいと思うので
後ろに乗せるサンプルと見比べてわからない場所を順番に確認すれば理解できると思う。
で、今読み込んでいる場所がどの状態かを知る。

で、XMLのタグ名称を取得する。
で内容を取得する。
タグ名称とSTART_TAGかEND_TAGかとかで処理わけをして、
最後に、 で、次の行にカーソルを進めていくかんじ。 やっぱり、文章で書いてもわかりづらいので
↓にサンプルを乗せます。
コメントも出来るだけ残したつもりなので参考にしてください。
4.Sample


コメント

  1. mori | URL | -

    Re: XMLを読み込む

    すいません、最近Androidの勉強をしているモリと申します。
    ここでお聞きするのはお門違いかとも思うのですが、もし心当たりがありましたらお教えいただきたいと思い、書き込みさせていただきます。

    XML読み込みのプログラムを作ろうと思い、本ページを参考にコードを書いていたのですが、URLConnectionのgetInputStream()で必ずnullが返って来てしまいます。
    試しに本ページと全く同じ内容で書いてみましたが、やはり73行目の結果isがnullになっているようでした。

    もし何か心当たりがありましたら、お教えいただけませんでしょうか?
    よろしくお願いします。

コメントの投稿

(コメント編集・削除に必要)
(管理者にだけ表示を許可する)

トラックバック

この記事のトラックバックURL
http://individualmemo.blog104.fc2.com/tb.php/55-68b7d0fc
この記事へのトラックバック



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。