原文地址:XML解析,NSXMLParser
作者:殷昭
要转载请表明链接地址:
http://blog.sina.com.cn/bbsme
1,首先获取文件目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
chatFile = [[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:CHATSFILE_NAME]];
2,加载文件
- (void) loadThread:(NSString*)xmlFile{
NSAutoreleasePool* pool = [[NSAutoreleasePoolalloc]init];
NSXMLParser*chatLogParser = [[NSXMLParseralloc]initWithContentsOfURL:[NSURLfileURLWithPath:xmlFile]];
[chatLogParsersetDelegate:self];
[currentStringsetString:@""];//记录当前节点的值
[currentChatInforemoveAllObjects];//节点对象
[chatLogParserparse];//开始XML解析
chatLogParserrelease];
[selfperformSelectorOnMainThread:@selector(finshLoadFile)withObject:nilwaitUntilDone:YES];//创建线程
[poolrelease];
}
3.代理方法
#pragma mark -
#pragma mark xml work methods
#define head @"moods" //定义的事例节点
#define parent @"mood"//定义的事例节点
#define child_speaker @"speaker"//定义的事例节点
#define child_date @"time"//定义的事例节点
#define child_text@"text"//定义的事例节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
if ([elementName isEqualToString:head]) {
[chatArray removeAllObjects];//移除临时对象
} else if ([elementName isEqualToString:parent]) {
[currentChatInfo removeAllObjects];//移除临时对象的节点
} else if ([elementName isEqualToString:child_speaker] ||
[elementName isEqualToString:child_text] ||
[elementName isEqualToString:child_date]) {
[currentString setString:@""];//设置当前临时节点值为NULL
storingCharacters = YES;
}
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
if([elementName isEqualToString:head]){
}else if([elementName isEqualToString:parent]){
[chatArray addObject:[NSDictionary dictionaryWithDictionary:currentChatInfo]];
}else if ([elementName isEqualToString:child_speaker] ||