参考:http://my.oschina.net/LouWk/blog/112978
XML解析一般分俩种模式SAX和DOM,事件和文档。
SAX解析:事物模型解析,从头开始读取文档然后根据读取到的头标签时要怎么处理,读完头标签后,理论上是读取标签值,然后读取后遇到结束标签等。
只在xml文档中查找特定条件的内容,并且只提取需要的内容。这样占用内存小,灵活。缺点就是写。
DOM解析:把整个xml文档一次性读出,放在一个树形结构里。在需要的时候查找特定节点,然后对节点进行读和写。主要优势是实现简单,读写平衡;缺点是比较占内存,因为把整个xml文档都读入内存,文件越大缺点就越明显。
NSXMLParser详解
initWithContentsOfURL通过NSURL创建解析器
initWithData通过NSData创建解析器
setDelegate为解析器定义委托
parse运行解析器
例子
NSString *str = [NSString stringWithFormat:@"<?xml version="1.0" encoding="UTF-8"?> <Books> <Book id="1"> <title>Circumference</title> <author>Nicholas Nicastro</author> <summary>Eratosthenes and the Ancient</summary> </Book> <Book id="2"> <title>Copernicus Secret</title> <author>Jack Repcheck</author> <summary>How the scientific revolution began</summary> </Book> <Book id="3"> <title>Angels and Demons</title> <author>Dan Brown</author> <summary>Robert Langdon is summoned to a Swiss</summary> </Book> </Books> "];
- (BOOL)parser:(NSString *)string{ NSXMLParser *par = [[NSXMLParser alloc] initWithData:[string dataUsingEncoding:NSUTF8StringEncoding]];//传递你要解析的数据 [par setDelegate:self]; return [par parse];//启动解析 } //step 1 准备解析 - (void)parserDidStartDocument:(NSXMLParser *)parser{ self.parserObjects = [[NSMutableArray alloc] initWithCapacity:0]; } //step 2 读取第一个头节点,如果内部有属性值,你可以获取出来 - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ NSLog(@"elementName:%@nnamespaceURI:%@nqName:%@n",elementName,namespaceURI,qName); NSLog(@"attributes:%@",attributeDict); } //step 3 获得首尾节点间的内容 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ //获得首位节点间内容 NSLog(@"string:%@",string); } //step 4 解析完当前节点 - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ //解析完当前节点 NSLog(@"tail.............."); NSLog(@"elementName:%@nnamespaceURI:%@nqName:%@",qName); } //step 5 解析结束 - (void)parserDidEndDocument:(NSXMLParser *)parser{ } //step 6 获取cdata块数据 - (void)parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{ }
GDATAXML详解
GDataXMLDocument:xml解析入口
GDataXMLElement:保存查找的数据
GDataXMLNode:保存解析的数据
NSError *error;
NSData *data = [NSData dataWithData:[str dataUsingEncoding:NSUTF8StringEncoding]];
//设置GDataXMLDocument
GDataXMLDocument *gdataXML = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
//解析
GDataXMLElement *rootElement = [gdataXML rootElement];
NSArray *arrStu = [rootElement elementsForName:@"Book"];
NSMutableString *str1 = [[NSMutableString alloc] initWithCapacity:0];
for (GDataXMLNode *node in arrStu) {
[str1 appendFormat:@"=========book==========n"];
for (int k = 0; k < [node childCount]; k++) {
GDataXMLNode *sub_node = [node childAtIndex:k];
switch (k) {
case 0:
[str1 appendFormat:@"title=%@rn",[sub_node stringValue]];
break;
case 1:
[str1 appendFormat:@"author=%@rn",[sub_node stringValue]];
break;
case 2:
[str1 appendFormat:@"summary=%@rn",[sub_node stringValue]];
break;
default:
break;
}
}
} (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|