加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML解析(NSXMLParser、GDataXML)

发布时间:2020-12-16 06:22:49 所属栏目:百科 来源:网络整理
导读:参考:http://my.oschina.net/LouWk/blog/112978 XML解析一般分俩种模式SAX和DOM,事件和文档。 SAX解析:事物模型解析,从头开始读取文档然后根据读取到的头标签时要怎么处理,读完头标签后,理论上是读取标签值,然后读取后遇到结束标签等。 只在xml文档中

参考: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;

}

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读