I love iPhone, Android, Cocos2d-x
[iPhone] XML を NSXMLParser を使用して解析する
iPhone では NSXMLDocument がシュミレータでは動作するが実機では動作しないそうなので、NSXMLParser を使用して解析してみました。
解析したのは下記のような XML です。
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user name="hoge" age="20" />
<user name="fuga" age="30" />
</users>
実際に解析するコード
static NSString *feedURLString = @"http://www.syuhari.jp/test/test.xml";
- (void)parserDidStartDocument:(NSXMLParser *)parser
{
// 解析開始時に実行する処理
}
- (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
[parser setDelegate:self];
[parser setShouldProcessNamespaces:NO];
[parser setShouldReportNamespacePrefixes:NO];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
NSError *parseError = [parser parserError];
if (parseError && error) {
*error = parseError;
}
[parser release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
// エレメント開始ハンドラ
if (qName) {
elementName = qName;
}
if ([elementName isEqualToString:@"user"]) {
// 属性値を出力
NSLog(@"Name is %@ , Age is %@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"age"]);
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
// エレメント終了ハンドラ
if (qName) {
elementName = qName;
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// エレメントの文字データを string で取得
}
NSError *parseError = nil;
[self parseXMLFileAtURL:[NSURL URLWithString:feedURLString] parseError:&parseError];
実際に使用する際は解析する処理(最後の2行以外)をクラスにして、最後の2行をそのクラスに対して実行するのがいいかと思います。
関連する投稿
One comment
コメントをどうぞ
Additional comments powered by BackType
2portable…
…