先日作成したFeedImageViewerのSAXパーサをStAXパーサに書き換えていたのですが実行してみたらClassNotFoundExceptionにて動きませんでした。
よくよく考えてみたらAndroidのemulatorは自身にクラスライブラリを持っていてそれがJREコンパチではないのですね。Javaのバイトコードをさらに変換するとか聞いていたので勝手に何でも動くものだと思い込んでいました。
emulatorのandroid.jarを開いたらjavax.xmlにはXPathもStAXもなかったのでした。
既に同じ疑問を抱いた人がいてこんなスレッドも見つかりました。
実際にはBEAが作ったリファレンス実装のコードを埋め込むなりApacheのソースを埋め込むなりすれば動くのでしょうけど、サイズのことを考えると頭が痛いです。
最新のJavaSEで携帯開発したいなぁ。*1
J2SE6のStAXは使えないが、XmlPullParserは使えた!
ここ参照
http://www.zymose.com/android/references/xmlpull_1_1_3_4c/org/xmlpull/v1/XmlPullParser.html
http://www.xmlpull.org/index.shtml
これでStAXとほぼ等価なことはできました。
org.xmlpull.v1.XmlPullParserがちゃっかりandroid.jarに入ってますね。
JavaのXML界隈はやっぱり地獄ですね。
とすると名前が違うだけでXPathもあるかもしれません。
問題はWBXMLが読めない
apkファイルの中のXMLはWBXMLに変換されているようです。
少なくともHome.apkでは。
それで、その中身を何とかパースしようと頑張っているのですができません!
一応、kxmlが入っているのですが私がやると動きません。
http://kxml.sourceforge.net/
できた方、ぜひ御報告を願います。
SAXをStAXにしてもそんなによくならない?
今回のRSSContentHandlerをStAXのCursor APIに直してみたのですがあまり良くなった気がしません。
複数のイベントハンドラが1つのwhileループとswitch文になるのはそれなりのメリットがあるのですが、結局コンテキストが各イベント処理にて失われているのでコンテキスト処理を別途自前で記述せねばならず書く量は減りません。
StAXにはIteratorもあるのでそちらを使うとまたほんの少しだけ記述量が減るのですがコンテキストが失われるのは同じ。しかもIteratorのほうはイベント毎にオブジェクトを作るので携帯開発などでは使うなとか書いてあります。
http://www.ibm.com/developerworks/xml/library/x-tipstx/
結局、全文検索でtitleタグがXMLのタイトルもITEMのタイトルも両方あるようなRSSではSAXとStAXであまり変わりはないようです。
結局XPath最強ですね。amachangウソつかない。
フルブラウザのWebkit搭載でJavaScriptではXPathがバリバリ使えるのでしょうに。AndroidのJavaでもXPath使っちゃダメかなぁ。
RSSは15KBytesほどしかないんですけどね。DOMにしたらどれくらいいくのだろう?
Bitmapを何枚も使うとそれどこじゃない気もしますが。本当にDOMを使ってはダメなのか。実機が出てきたら検証したいと思います。
RSSやAtomってXMLでないとダメなのかなぁ。
descriptionタグにXHTML書いてあったりとかXSLT対応とかXMLが必要なのだろうか。
FFFFFoundのRSSはXSLTに対応していてブラウザにて表示できたりするのですが、XSLTって今更復活するのでしょうか。XSLTを読んだことはあっても書く気は一切しません。AndroidのXMLも手書きで書くのはとても嫌。名前空間の"android:"を属性全てに書くなんてまずそこからケチるべきなのではと思ってしまう。
デベロッパワークスで良いXMLエディタを使えとかいって400ドルもするXMLエディタを紹介しておりましたが、小一時間問い詰めたい。
以上、苦労して書いたプログラムが実行できなかったがための非生産的な日記でした。
無題
http://tech.slashdot.org/comments.pl?sid=556986&cid=23460718
I teach at a foreign language university in the Tokyo area. My students get hired to become software engineers pretty regularly. No experience. No interest. They just scored right on the company aptitude test.