XML解析(NSXMLParser、GDataXML)

前端之家收集整理的这篇文章主要介绍了XML解析(NSXMLParser、GDataXML)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

参考: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=%@\r\n",[sub_node stringValue]];

break;

case 1:

[str1 appendFormat:@"author=%@\r\n",[sub_node stringValue]];

break;

case 2:

[str1 appendFormat:@"summary=%@\r\n",[sub_node stringValue]];

break;

default:

break;

}

}

}

猜你在找的XML相关文章