关于iOS解析XML使用NSXMLParser和GDataXML不得不说的一些事
2015-07-07 20:01
501 查看
NSXMLParser
最近刚学习iOS,需要解析一个XML如下:http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101,最开始选择使用自带的NSXMLParser,首先,NSXMLParser必须继承NSXMLParserDelegate协议
然后就是要初始化啦,
(1)遍例xml的节点,是所有的节点
(2)当xml节点有值时,则进入,用来取出
(3)当遇到结束标记时,进入,用来存储上述(2)取得值,
在遍历结束前,会反复执行上述三个方法,但是在解析的过程中,出现了一个问题,就是数字和文字分离的情况,比如,2级,解析的结果是2和级而不是2级,最终也没弄明白事什么原因,随后又换了GDataXML,就没有这个问题了。
2.GDataXML
GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2–DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。
(1)获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
(2)工程中增加“libxml2.dylib”库
(3)在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2”到路径中,在Linking中找到 Other Linker Flags 对应的值改为:-lxml2。
(4)添加“GDataXMLNode.h”文件到头文件中
首先,初始化GDataXMLDocument,在定义根元素,以及根元素下一层的孩子元素
然后就是层层循环嵌套的过程啦
GDataXML的方式很容易理解,就是在不停嵌套的时候对跟和孩子不要弄晕就好啦!本人才疏学浅,有不对的地方还忘批评指正!
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近刚学习iOS,需要解析一个XML如下:http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101,最开始选择使用自带的NSXMLParser,首先,NSXMLParser必须继承NSXMLParserDelegate协议
@interface ... : ... <NSXMLParserDelegate>
然后就是要初始化啦,
- (void)viewDidLoad { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];//设置XML数据 [parser setDelegate:self]; [parser parse]; }
(1)遍例xml的节点,是所有的节点
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ }
(2)当xml节点有值时,则进入,用来取出
<a></a>之间的值
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ }
(3)当遇到结束标记时,进入,用来存储上述(2)取得值,
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ }
在遍历结束前,会反复执行上述三个方法,但是在解析的过程中,出现了一个问题,就是数字和文字分离的情况,比如,2级,解析的结果是2和级而不是2级,最终也没弄明白事什么原因,随后又换了GDataXML,就没有这个问题了。
2.GDataXML
GDataXMLNode是Google提供的用于XML数据处理的类集。该类集对libxml2–DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。
(1)获取GDataXMLNode.h/m文件,将GDataXMLNode.h/m文件添加到工程中
(2)工程中增加“libxml2.dylib”库
(3)在工程的“Build Settings”页中找到“Header Search Path”项,添加/usr/include/libxml2”到路径中,在Linking中找到 Other Linker Flags 对应的值改为:-lxml2。
(4)添加“GDataXMLNode.h”文件到头文件中
首先,初始化GDataXMLDocument,在定义根元素,以及根元素下一层的孩子元素
- (void)viewDidLoad { NSString *path = [NSString stringWithFormat:@"http://wthrcdn.etouch.cn/WeatherApi?citykey=101050101"]; NSURL *url = [[NSURL alloc] initWithString:path]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithData:urlData options:0 error:nil]; GDataXMLElement *xmlEle = [xmlDoc rootElement]; //根元素 resp NSArray *array = [xmlEle children];//孩子元素city,updatetime... [self parseXml:array]; }
然后就是层层循环嵌套的过程啦
-(void) parseXml:(NSArray *)array { for (int i = 0; i<[array count]; i++) { GDataXMLElement *ele = [array objectAtIndex:i]; if([[ele name] isEqualToString:@"city"]) ... else if ([[ele name] isEqualToString:@"forecast"]) { GDataXMLDocument *weatherxml = [[GDataXMLDocument alloc]initWithRootElement:ele]; GDataXMLElement *weatherxmlele = [weatherxml rootElement];//根元素 forecast NSArray *weatherarray = [weatherxmlele children];//孩子元素 weather for(int j = 0;j<[weatherarray count];j++) } } }
GDataXML的方式很容易理解,就是在不停嵌套的时候对跟和孩子不要弄晕就好啦!本人才疏学浅,有不对的地方还忘批评指正!
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- XML 与 JSON 优劣对比
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- As3.0 xml + Loader应用代码
- DVI 视频接口图文解析
- IE6不能正常解析CSS文件问题的解决方法及原因分析
- 网马生成器 MS Internet Explorer XML Parsing Buffer Overflow Exploit (vista) 0day
- ext读取两种结构的xml的代码
- C#自写的一个HTML解析类(类似XElement语法)
- C#针对xml基本操作及保存配置文件应用实例
- ruby 过程对象 解析
- asp下查询xml的实现代码
- sqlserver FOR XML PATH 语句的应用
- 使用sp_xml_preparedocument处理XML文档的方法