XML有两种解析方式:
- SAX解析
SAX:SimpleAPIfor XML。基于事件驱动的解析方式,逐行解析数据。(采用协议回调机制)
- DOM解析
DOM:DocumentObjectModel(文档对象模型)。解析时需要将XML文件整体读入,并且将XML结构化成树状,使用时再通过树状结构读取相关数据
NSXMLParser是iOS自带的XML解析类。采用SAX方式解析数据, 解析过程由NSXMLParserDelegate协议方法回调
NSXMLParser
NSXMLParser 由苹果SDK提供
在项目中添加协议NSXMLParserDelegate
常用的有3个方法
// 当开始处理某个元素节点时触发该方法
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
// 当发现元素中的内容是触发该方法
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
// 当处理完某个元素节点时触发该方法
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
TouchXML
- TouchXml类库下载链接 —– 注意需要改为mrc 即-fno-objc-arc
- 导入 CXMLDocument.h
- 开始解析
code案例
此处网络请求使用第三方类库ASIHttpRequest
#import "ViewController.h"
#import "ASIFormDataRequest.h"
#import "AppDelegate.h"
#import "ASIDownloadCache.h"
#import "CXMLDocument.h"
@interface ViewController () <UITableViewDataSource,UITableViewDelegate,NSXMLParserDelegate>
{
ASIFormDataRequest *_selectStuInfo;
NSMutableArray *_allStudentsArr; // 所有的学生数组
NSMutableDictionary *_studentDic;