原文地址:XML解析,NSXMLParser作者:殷昭
要转载请表明链接地址:http://blog.sina.com.cn/bbsme
1,首先获取文件目录
NSArray*paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString*documentsDirectory = [paths objectAtIndex:0];
chatFile= [[NSString alloc] initWithString:[documentsDirectorystringByAppendingPathComponent:CHATSFILE_NAME]];2,加载文件
- (void)loadThread:(NSString *)xmlFile {
NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init];
NSXMLParser *chatLogParser =[[NSXMLParser alloc] initWithContentsOfURL:[NSURLfileURLWithPath:xmlFile]];
[chatLogParser setDelegate:self];
[currentString setString:@""];//记录当前节点的值
[currentChatInfo removeAllObjects];//节点对象
[chatLogParser parse];//开始XML解析
chatLogParser release];
[self performSelectorOnMainThread:@selector(finshLoadFile) withObject:nil waitUntilDone:YES];//创建线程
[pool release];
}
3.代理方法
#pragma mark -
#pragma mark xml work methods
#define head @"moods" //定义的事例节点
#define parent@"mood" //定义的事例节点
#define child_speaker @"speaker" //定义的事例节点
#define child_date@"time" //定义的事例节点
#definechild_text @"text" //定义的事例节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString*)elementName namespaceURI:(NSString *)namespaceURIqualifiedName:(NSString *)qName attributes:(NSDictionary*)attributeDict
{
if([elementName isEqualToString:head]) {
[chatArrayremoveAllObjects];//移除临时对象
}else if ([elementName isEqualToString:parent]) {
[currentChatInforemoveAllObjects];//移除临时对象的节点
}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 *)namespaceURIqualifiedName:(NSString *)qName
{
if([elementName isEqualToString:head]){
}else if([elementName isEqualToString:parent]){
[chatArray addObject:[NSDictionarydictionaryWithDictionary:currentChatInfo]];
}else if ([elementName isEqualToString:child_speaker]||