LoginSignup
25
25

More than 5 years have passed since last update.

Ono '斧' を触ってみた

Posted at

先日、AFNetworkingNSHipster で有名な Mattt が Ruby の Nokogiri 風の XML & HTML パーサー Ono 斧 を公開しています。

早速少しだけ触ってみた

CSS Selector でのパースをサポート

XPath での指定なら今もいくつかライブラリがありますが CSS Selector をサポートしたものは私は知りませんでした。個人的には Nokogiri を連想させる最大のポイントです。

Subscripting 対応

エレメントのアトリビュートへのアクセスは Subscripting 対応になっています。

element[@"href"];

という書き方で href アトリビュートの値が取得出来ます。

NSDate のサポート

XML が対象になるかと思いますが dateValue メソッドで NSDate 型を返してくれます。
"yyyy-MM-dd'T'HH:flag_mm:ssZ" のみのサポートですがお手軽ですね。

Block を使った列挙が可能

- (void)enumerateElementsWithXPath:(NSString *)XPath
                             block:(void (^)(ONOXMLElement *element))block;

- (void)enumerateElementsWithCSS:(NSString *)CSS
                           block:(void (^)(ONOXMLElement *element))block;

このような列挙もサポートされています。また NSFastEnumeration に対応させた実装のサンプルにもなっているので勉強になります。

シンプルな実装

ファイルとしては実質1組の .h .m ファイルでクラスの数はそれ以上ありますが規模の小さいコードなので先に挙げたように Subscripting サポートや NSFastEnumeration 対応などなど実装の参考になりそうなちょうど良いサンプルです。

まだまだこれから

できたばかりということもあるのか CSS での id 指定が以下のようなエラーを吐いてしまってだめでした。

XPath error : Invalid expression
//[@id = 'header-container']

Nokogiri と同じ指定をしても他にもページによってはエレメントが見つからないこともありました。Mattt は Nokogiri と同等のものを目指しているのか名称だけリスペクトしてるのかわかりませんが個人的には Nokogiri と同等の動きをするライブラリになってくれることを期待しています。

今週末に CocoaPods 対応やドキュメント等が揃ってくるようなのでこれからも楽しみにしたいと思います。

簡単な動作確認ができるサンプルを置いておくので気になる方は試してみてください。

OnoScrapingSample

25
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
25