XMLの文字実体参照をアンエスケープ

http://farm3.static.flickr.com/2039/2511539541_b8c0356486.jpg
日が経ってしまいましたが、前回の続きのお話です。前回まででTwitter APIを利用したおおよその動作は実装できました。しかし取得したXMLが文字実体参照になってしまいます。色々と試してみたところ、NSXMLParserを用いれば正しくアンエスケープできることがわかりました。しかし">"や"<"などは相変わらず実体参照のままです。またデバッグ時に、パースする前にXMLの中身を確認したいってことありますよね。そんなわけで今回はGoogle Toolbox for Macをご紹介。


Google Toolbox for Mac(略してGTM)は、MaciPhone開発に使えるものがギッシリ詰まったライブラリと言えば良いでしょう。今回使用するもの以外でも、重宝しそうなものが結構あります。DownloadタブからDeprecated downloadsを選び、google-toolbox-for-mac-1-5-1.zipをダウンロードします*1。zipファイルを展開して、GTMDefines.h、GTMNSString+HTML.h、GTMNSString+HTML.mという3つのファイルをプロジェクトに追加します。GTMNSString+HTML.{h,m}はFoundationディレクトリの中にあります。



「デスティネーショングループの〜」にチェックを忘れずに。

結果、このように3つのファイルが追加されていることを確認してください。

それでは前回のソースファイルを修正します。と言っても、MyTwitterViewController.mだけです。

#import "GTMNSString+HTML.h"
...
// 変更前
// - (void)ticket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
//  NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
//  NSLog(@"%@", dataString);
// }

// 変更後
- (void)ticket:(OAServiceTicket *)ticket didFinishWithData:(NSData *)data {
  NSString *dataString = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
  NSLog(@"%@", [dataString gtm_stringByUnescapingFromHTML]);
}
...

GTMNSString+HTML.hをインポートし、dataStringのgtm_stringByUnescapingFromHTMLメソッドを呼び出し、NSLogで出力してみました。実際にプロジェクトをビルドし実行してみると、以下のように日本語も正しく表示されるのがわかります。


僕の場合、GTMがDeprecatedになっていたせいでダウンロードできずに数時間悩んでいました。見つかれば簡単なんですけどね。次回はTwitter APIのxAuth利用申請方法と、サンプルプログラムを紹介したいと思います。

*1:なぜDeprecatedになっているんでしょうね…