XPathQueryを使ったXMLのパース
iPhoneでは標準でlibxml2とNSXMLParserという2種類のXMLをパースするためのライブラリが使えるのだが、XPathQueryという前者のlibxml2のラッパーをMatt Gallagherさんという方が作っているので、その使い方をメモしておく。
[設定]
1. XPathQueryのサイトからソースコードが入ったzipファイルをダウンロード。
2. zipファイルに含まれるXPathQuery.mとXPathQuery.hをiPhoneのプロジェクトにコピーする
3. XCodeのプロジェクトの設定で、ビルドのヘッダ検索パスに/usr/include/libxml2を追加する
4. XCodeのプロジェクトにlibxml2.dylibのライブラリを追加する
[使い方]
例えば以下のようなXMLファイルをダウンロードしてきてパースしたいとする。
<?xml version="1.0" encoding="UTF-8"?> <files> <file name="C-1998-768_files.xml" source="original"> <format>Metadata</format> </file> <file name="C-1998-768_meta.xml" source="original"> <format>Metadata</format> </file> </files>
XPathQueryを使ってXML中のファイル名を取得する場合には、以下のようなコードとなる。
NSURL *url = [NSURL URLWithString:@"http://hoge.com/hoge.xml"]; NSData *data = [NSData dataWithContentsOfURL:url]; NSArray *filenames = PerformXMLXPathQuery(data, @"/files/file/@name"); for (NSDictionary *dic in filenames) { NSLog(@"filename: %@", [dic objectForKey:@"nodeContent"]); }
上記のようにXPathを使ってシンプルなXMLファイルをパースする場合には、このXPathQueryは結構便利そうである。
ちなみにXPathQueryはHTMLのパースにも対応しており、PerformXMLXPathQueryという関数をPerformHTMLXPathQueryに変えるだけで、HTMLのパースも可能となる。
[参考記事]