Tomute’s Notes Twitter

2009-10-04

[] 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パースも可能となる。


[参考記事]

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証