iOS SDK中使用NSXMLParser解析XML
来源:互联网 发布:国际阿里云价格 编辑:程序博客网 时间:2024/05/23 19:13
iOS SDK中使用NSXMLParser解析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 { //记录所取得的文字列}- (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 { //.....}
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- iOS XML解析 - NSXMLParser
- ios-使用NSXMLParser解析XML文件
- 【IOS中XML解析】NSXMLParser方法解析XML文件案例
- 【ios】通过NSXMLParser解析xml
- ios NSXmlparser方法 XML解析
- IOS内置NSXMLParser解析xml
- iOS-XML文档解析(NSXMLParser)
- 使用NSXMLParser解析xml文件
- 使用NSXMLParser解析xml文件
- 使用NSXMLParser解析XML数据
- 使用NSXMLParser解析XML数据
- ios使用NSXMLParser类和 GDataXMLNode解析XML
- IOS用NSXMLParser实现XML解析
- iOS之NSXMLParser对XML解析
- iOS开发------XML原生解析(NSXMLParser篇)
- cruisecontrol.net集成环境参考
- 在线窗口翻译 中伪ASCII的用途
- 下周开始正常的作息时间
- module学习(14)
- Xbrowser无法连接到Linux的解决办法
- iOS SDK中使用NSXMLParser解析XML
- MySQL数据库浅谈MyISAM存储引擎
- ORA-01562 和 ORA-01628 问题解决!
- 【转载】µC/OS-II进程调度模型分析(PC移植版)
- module学习(15)
- 搜狗拼音的自定义短语,可以输入一些特殊字符(比如'oaorfa'输入‘α’)
- 开始学习python
- 建设全功能团队
- C# 使用 GetOleDbSchemaTable 检索架构信息(表、列、主键等)