常用的交互数据格式XML和JSON,此篇来说XML解析
XML解析的2种方式:
- DOM,一次将整个XML加载到内存,适合解析小文件
- SAX,从根元素开始,按顺序一个一个元素向下解析,适合解析大文件
常用的XML解析手段:
- NSXMLParser(苹果自带的,使用SAX方式)
- 第三方框架,
A:libxml2(包含在iOS SDK中),同时支持DOM和SAX解析
B:GDadaXml: DOM 解析方式,Google基于libxml2开发
使用NSXMLParser解析
- 初始化解析器然后开始解析:
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:self.earthquakeData];
[parser setDelegate:self];
[parser parse];
- 解析过程的代理
@protocol NSXMLParserDelegate <NSObject>
@optional
// Document handling methods
- (void)parserDidStartDocument:(NSXMLParser *)parser;
// sent when the parser begins parsing of the document.
- (void)parserDidEndDocument:(NSXMLParser *)parser;
// sent when the parser has completed parsing. If this is encountered, the parse was successful.
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError;
// ...and this reports a fatal error to the delegate. The parser will stop parsing.
- (void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError;
// If validation is on, this will report a fatal validation error to the delegate. The parser will stop parsing.
//更多代理方法请查看NSXMLParserDelegate
使用GDataXML 解析
- 先需要导入libxml2.2.dylib. 同时设置它为非arc模式。
- 通过请求获取XML Data后,开始解析
-(void)parseXMLData:(NSData *)data
{
//加载XML
GDataXMLDocument *docXML=[[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
//获得根元素
GDataXMLElement *root=docXML.rootElement;
//获得所有的video元素
NSArray *elements=[root elementsForName:@"video"];
NSMutableArray *videos=[NSMutableArray array];
for (GDataXMLElement *ele in elements)
{
//获取所有想要的信息
id info = [ele attributeForName:XX];
[videos addObject:info];
}
}