ios xml 解析
iOS SDK 的 NSXMLParser 解析 XML 文档是事件驱动模式的,即采用 SAX 方式来解析
XML 格式文档。NSXMLParser 在处理 XML 文档的过程 中当遇到一些要素(元素、属性 、
CDATA 块、评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给
NSXMLParserDelegate 处理。同时它也会报告错误。
1. 打开一个 xml 文件,读取内容到 NSData 中。NSString *path = [[NSBundle mainBundle]
pathForResource:@”filename” ofType:@”xml”];
NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *data = [file readDataToEndOfFile];
[file closeFile];
2. 调用 NSXMLParser 的 initWithData:方法,并设置代理 delegate。
NSXMLParser *m_parser = [[NSXMLParser alloc] initWithData:data];
//设置该类本身为代理类,即该类在声明时要实现 NSXMLParserDelegate 委托协议
[m_parser setDelegate:self]; //设置代理为本地
BOOL flag = [m_parser parse]; //开始解析
if(flag) {
NSLog(@”获取指定路径的 xml 文件成功”);
}else{
NSLog(@”获取指定路径的 xml 文件失败”);
}
[m_parser release];
当然还可以有其他初始化生成方法,如:
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL
URLWithString:urlString]];
直接自定义一个方法来实现创建解析:
1 – (void)parseXMLFileAtURL:(NSURL *)URL parseError:(NSError **)error{
2 NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:URL];
3 [parser setDelegate:self];
4 [parser setShouldProcessNamespaces:NO];
5 [parser setShouldReportNamespacePrefixes:NO];
6 [parser setShouldResolveExternalEntities:NO];
7 [parser parse];
8 NSError *parseError = [parser parserError];
9 if (parseError && error) {
10 *error = parseError;
11 }
12 [parser release];
13 }