好贷网好贷款

ios xml解析

发布时间:2016-12-3 3:56:25 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"ios xml解析",主要涉及到ios xml解析方面的内容,对于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 }   3. 调用回调函数。       当完成上面的parser初始化并执行parser语句时([parser parse]),程序就会跳到代理方法,调用回调函数didStartElement,该方法会将整个xml遍历一遍,并识别xml里面的元素名称(elementName),在发现要查找的信息时,创建一个如数组或其他变量以便在合适的时候存储这些信息。一般地,具体完成相关存储的操作往往在didEndElement回调函数中完成。 //开始解析前,在这里可以做一些初始化工作 // 假设已声明有实例变量 dataDict,parserObject - (void)parserDidStartDocument:(NSXMLParser *)parser {    dataDict = [[NSMutableDictionary alloc] initWithCapacity:0];  //每一条信息都用字典来存储    parserObjects = [[NSMutableArray alloc] init];  //每一组信息都用数组来存,最后得到的数据即在此数组中 } //当解析器对象遇到xml的开始标记时,调用这个方法。 //获得结点头的值 //解析到一个开始tag,开始tag中可能会有properpies,例如<book catalog="Programming"> //所有的属性都存储在attributeDict中 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {      if([elementName isEqualToString:@"book"]) {            NSString *catalog = [attributeDict objectForKey:@"catalog"];      }else if() {        //......      } } //当解析器找到开始标记和结束标记之间的字符时,调用这个方法。 //解析器,从两个结点之间读取具体内容 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {     //记录所取得的文字列 }www.2cto.com - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{     //NSLog(@"cData:%@",[NSString stringWithUTF8String:[CDATABlock bytes]]); } //当解析器对象遇到xml的结束标记时,调用这个方法。 //获取结点结尾的值,此处为一Tag的完成 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { } //xml解析结束后的一些操作可在此 - (void)parserDidEndDocument:(NSXMLParser *)parser {    //..... }

上一篇:关于android系统内存占用超过80%的解决方法!有问题先百度~吼吼
下一篇:V4L2+QT视频会议系统源码

相关文章

关键词: ios xml解析

相关评论