パーサーの結果は、次の形式のNSMutableDictionaryになります。
Dictionary:
key: "parentNode" value: (NSMutableDictionary*) //
key: "name" value: (NSString*) //
key: "attributes" value: (NSDictionary*) //
key: "childs" value: (NSMutableArray*) // NSMutableDictionary
key: "content" value: (NSString*) // CDDATA
次のように使用できます。
XMLParser * myParser = [[XMLParser alloc]init];
[myParser setDelegate(self)];
if (![myParser parseUrl: @"http://....xml" )
{
NSLog( @"Some error" );
}
, :
-( void )parseFinished:(id) parser result:(NSMutableDictionary*) rootNode
{
...
}
* This source code was highlighted with Source Code Highlighter .
したがって、コードは次のとおりです。
「XMLParser.h」
#import <Foundation/Foundation.h>
#import "XMLParserProtocol.h"
@ interface XMLParser : NSObject {
NSMutableDictionary * currentNode;
id<XMLParserProtocol> delegate ;
}
@property (assign) id<XMLParserProtocol> delegate ;
-(BOOL) parseUrl:(NSString*)urlToParse;
@end
* This source code was highlighted with Source Code Highlighter .
「XMLParser.m」
#import "XMLParser.h"
@implementation XMLParser
@synthesize delegate ;
-(BOOL)parseUrl:(NSString *)urlToParse
{
/**
**/
currentNode = [[NSMutableDictionary alloc] init];
[currentNode setObject: @"RootNode" forKey: @"name" ];
[currentNode setObject:[[NSMutableArray alloc]init] forKey: @"childs" ];
/**
**/
NSURL * url = [[NSURL alloc] initWithString:urlToParse];
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
return [parser parse];
}
-( void )parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSMutableDictionary * newNode = [[NSMutableDictionary alloc] init];
[newNode setObject: currentNode forKey: @"parentNode" ];
[newNode setObject: [elementName copy] forKey: @"name" ];
[newNode setObject: [attributeDict copy] forKey: @"attributes" ];
[newNode setObject: [[NSMutableArray alloc]init] forKey: @"childs" ];
NSMutableArray * childs = [currentNode objectForKey: @"childs" ];
[childs addObject:newNode];
currentNode = newNode;
}
-( void )parser:(NSXMLParser *)parser foundCharacters:(NSString *) string
{
[currentNode setObject:[ string copy] forKey: @"content" ];
}
-( void )parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
currentNode = [currentNode objectForKey: @"parentNode" ];
}
-( void )parserDidEndDocument:(NSXMLParser *)parser
{
if ( delegate )
{
[ delegate parseFinished:self result: currentNode];
}
}
@end
* This source code was highlighted with Source Code Highlighter .
#import "XMLParser.h"
@implementation XMLParser
@synthesize delegate ;
-(BOOL)parseUrl:(NSString *)urlToParse
{
/**
**/
currentNode = [[NSMutableDictionary alloc] init];
[currentNode setObject: @"RootNode" forKey: @"name" ];
[currentNode setObject:[[NSMutableArray alloc]init] forKey: @"childs" ];
/**
**/
NSURL * url = [[NSURL alloc] initWithString:urlToParse];
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
return [parser parse];
}
-( void )parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSMutableDictionary * newNode = [[NSMutableDictionary alloc] init];
[newNode setObject: currentNode forKey: @"parentNode" ];
[newNode setObject: [elementName copy] forKey: @"name" ];
[newNode setObject: [attributeDict copy] forKey: @"attributes" ];
[newNode setObject: [[NSMutableArray alloc]init] forKey: @"childs" ];
NSMutableArray * childs = [currentNode objectForKey: @"childs" ];
[childs addObject:newNode];
currentNode = newNode;
}
-( void )parser:(NSXMLParser *)parser foundCharacters:(NSString *) string
{
[currentNode setObject:[ string copy] forKey: @"content" ];
}
-( void )parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
currentNode = [currentNode objectForKey: @"parentNode" ];
}
-( void )parserDidEndDocument:(NSXMLParser *)parser
{
if ( delegate )
{
[ delegate parseFinished:self result: currentNode];
}
}
@end
* This source code was highlighted with Source Code Highlighter .
#import "XMLParser.h"
@implementation XMLParser
@synthesize delegate ;
-(BOOL)parseUrl:(NSString *)urlToParse
{
/**
**/
currentNode = [[NSMutableDictionary alloc] init];
[currentNode setObject: @"RootNode" forKey: @"name" ];
[currentNode setObject:[[NSMutableArray alloc]init] forKey: @"childs" ];
/**
**/
NSURL * url = [[NSURL alloc] initWithString:urlToParse];
NSXMLParser * parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
return [parser parse];
}
-( void )parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
NSMutableDictionary * newNode = [[NSMutableDictionary alloc] init];
[newNode setObject: currentNode forKey: @"parentNode" ];
[newNode setObject: [elementName copy] forKey: @"name" ];
[newNode setObject: [attributeDict copy] forKey: @"attributes" ];
[newNode setObject: [[NSMutableArray alloc]init] forKey: @"childs" ];
NSMutableArray * childs = [currentNode objectForKey: @"childs" ];
[childs addObject:newNode];
currentNode = newNode;
}
-( void )parser:(NSXMLParser *)parser foundCharacters:(NSString *) string
{
[currentNode setObject:[ string copy] forKey: @"content" ];
}
-( void )parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
currentNode = [currentNode objectForKey: @"parentNode" ];
}
-( void )parserDidEndDocument:(NSXMLParser *)parser
{
if ( delegate )
{
[ delegate parseFinished:self result: currentNode];
}
}
@end
* This source code was highlighted with Source Code Highlighter .
「XMLParserProtocol.h」
#import <UIKit/UIKit.h>
#import "XMLParser.h"
@protocol XMLParserProtocol
@optional
-( void ) parseFinished:(id) parser result:(NSMutableDictionary *) rootNode;
@end
* This source code was highlighted with Source Code Highlighter .