parser的步骤:
1 获取xml文件的路径
2 使用xml文件的路径初始化字符串
3 将字符串转化为NSData类型的数据
4 使用NSData初始化parser
5 设置parser的代理为它本身
6 开始解析
需要遵循的协议为: NSXMLParserDelegate
需要重写的方法为:
- (void)parserNSXMLParser *)parser didStartElementNSString *)elementName namespaceURINSString *)namespaceURI qualifiedNameNSString *)qName attributesNSDictionary *)attributeDict;
- (void)parserNSXMLParser *)parser didEndElementNSString *)elementName namespaceURINSString *)namespaceURI qualifiedNameNSString *)qName;
- (void)parserNSXMLParser *)parser foundCharacters:(NSString *)string;
代码:
- (void)viewDidLoad
{
[super viewDidLoad];
movielistArray = [[NSMutableArray alloc]init];
movieDic = [[NSMutableDictionary alloc]init];
curText = [[NSMutableString alloc]init];
NSString* strPath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"xml"];
NSString* strXml = [[NSString alloc]initWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",strXml);
NSData* data = [strXml dataUsingEncoding:NSUTF8StringEncoding];
parser = [[NSXMLParser alloc]initWithData:data];
self.parser.delegate = self;
[parser parse];
[strXml release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"channel"])
[movielistArray removeAllObjects];
else if ([elementName isEqualToString:@"item"])
[movieDic removeAllObjects];
else if ([elementName isEqualToString:@"title"])
[curText setString:@""];
else if ([elementName isEqualToString:@"summary"])
[curText setString:@""];
else if ([elementName isEqualToString:@"description"])
[curText setString:@""];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"])
[self.movielistArray addObject:[NSDictionary dictionaryWithDictionary:self.movieDic]];
else if ([elementName isEqualToString:@"title"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
else if ([elementName isEqualToString:@"summary"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
else if ([elementName isEqualToString:@"description"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[self.curText appendString:string];
}
1 获取xml文件的路径
2 使用xml文件的路径初始化字符串
3 将字符串转化为NSData类型的数据
4 使用NSData初始化parser
5 设置parser的代理为它本身
6 开始解析
需要遵循的协议为: NSXMLParserDelegate
需要重写的方法为:
- (void)parserNSXMLParser *)parser didStartElementNSString *)elementName namespaceURINSString *)namespaceURI qualifiedNameNSString *)qName attributesNSDictionary *)attributeDict;
- (void)parserNSXMLParser *)parser didEndElementNSString *)elementName namespaceURINSString *)namespaceURI qualifiedNameNSString *)qName;
- (void)parserNSXMLParser *)parser foundCharacters:(NSString *)string;
代码:
- (void)viewDidLoad
{
[super viewDidLoad];
movielistArray = [[NSMutableArray alloc]init];
movieDic = [[NSMutableDictionary alloc]init];
curText = [[NSMutableString alloc]init];
NSString* strPath = [[NSBundle mainBundle]pathForResource:@"data" ofType:@"xml"];
NSString* strXml = [[NSString alloc]initWithContentsOfFile:strPath encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%@",strXml);
NSData* data = [strXml dataUsingEncoding:NSUTF8StringEncoding];
parser = [[NSXMLParser alloc]initWithData:data];
self.parser.delegate = self;
[parser parse];
[strXml release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if([elementName isEqualToString:@"channel"])
[movielistArray removeAllObjects];
else if ([elementName isEqualToString:@"item"])
[movieDic removeAllObjects];
else if ([elementName isEqualToString:@"title"])
[curText setString:@""];
else if ([elementName isEqualToString:@"summary"])
[curText setString:@""];
else if ([elementName isEqualToString:@"description"])
[curText setString:@""];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if ([elementName isEqualToString:@"item"])
[self.movielistArray addObject:[NSDictionary dictionaryWithDictionary:self.movieDic]];
else if ([elementName isEqualToString:@"title"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
else if ([elementName isEqualToString:@"summary"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
else if ([elementName isEqualToString:@"description"])
[self.movieDic setObject:[NSString stringWithString:curText] forKey:elementName];
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
[self.curText appendString:string];
}