在实际开发中,JSON数据解析更简单易行,一般均使用json数据解析,因此,程序猿们请务必和后台搞好关系,让他给你json数据。
XML解析:
ios SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选:TBXML、TouchXML、KissXML、TinyXML和GDataXML。
解析XML通常有两种方式:DOM和SAX
DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),遍历树结构可以检索任意XML节点,读取它的属性和值。
SAX解析XML时,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。
NSXMLParser:
举个栗子:
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> 头标签,里面的xmlns,可以看成是属性
<channel>
<title>呵呵呵呵</title>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | -( BOOL )parser:( NSString *)string { //系统自带的 NSXMLParser *par = [[[ NSXMLParser alloc] initWithData:[string dataUsingEncoding: NSUTF8StringEncoding ]]autorelease]; [par setDelegate: self ]; //设置NSXMLParser对象的解析方法代理 return [par parse]; //调用代理解析NSXMLParser对象,看解析是否成功 } } #pragma mark xmlparser //step 1 :准备解析 - ( void )parserDidStartDocument:( NSXMLParser *)parser { // NSLog(@"%@",NSStringFromSelector(_cmd) ); } //step 2:准备解析节点 - ( void )parser:( NSXMLParser *)parser didStartElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName attributes:( NSDictionary *)attributeDict { // NSLog(@"%@",NSStringFromSelector(_cmd) ); } //step 3:获取首尾节点间内容 - ( void )parser:( NSXMLParser *)parser foundCharacters:( NSString *)string { NSLog (@ "%@" , NSStringFromSelector (_cmd) ); } //step 4 :解析完当前节点 - ( void )parser:( NSXMLParser *)parser didEndElement:( NSString *)elementName namespaceURI:( NSString *)namespaceURI qualifiedName:( NSString *)qName { NSLog (@ "%@" , NSStringFromSelector (_cmd) ); } //step 5;解析结束 - ( void )parserDidEndDocument:( NSXMLParser *)parser { // NSLog(@"%@",NSStringFromSelector(_cmd) ); } //获取cdata块数据 - ( void )parser:( NSXMLParser *)parser foundCDATA:( NSData *)CDATABlock { // NSLog(@"%@",NSStringFromSelector(_cmd) ); } |
这里解释下GDataXML:
GDaraXML:这时一套Google开发得DOM方式解析XML类库,支持读取和修改XML文档,支持XPath方式查询。
安装说明:
1. 从http://code.google.com/p/gdata-objectivec-client/downloads/list下载“gdata-objective-c client library.”
2. 解压缩文件,找到Source\XMLSupport,并且将其中的GDataXMLNode.h 和 GDataXMLNode.m文件拖到项目中
3. 选中项目,选中“Build Settings”标签页
4. 将Build Settings页中,顶部的“Basic”标签切换到“All”
5. 找到“Paths\Header Search Paths”项,并添加“/usr/include/libxml2”到列表中
6. 找到“Linking\Other Linker Flags”项,并添加“-lxml2”到列表中,
在需要调用GDataXML的代码文件头部,加入:
#import “GDataXMLNode.h”
解析DOM文档对象示例:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
if (doc == nil) { return nil; }
NSLog(@"%@", doc.rootElement);
[doc release];
[xmlData release];
JSON解析:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | NSString * urlStr = [ NSString stringWithFormat:@ "http://121.40.54.251:80/HandheldKitchen/api/more/hotwater!getHotwaterList.do?id=%lu&page=1&pageRecord=12&is_traditional=0" ,( long )_iid]; NSURL * url = [ NSURL URLWithString:urlStr]; NSMutableURLRequest * request = [ NSMutableURLRequest requestWithURL:url]; request.HTTPMethod = @ "GET" ; [ self .detailsSourceArray removeAllObjects]; [ NSURLConnection sendAsynchronousRequest:request queue:[ NSOperationQueue mainQueue] completionHandler:^( NSURLResponse *response, NSData *data, NSError *connectionError) { if (data) { NSMutableDictionary * dic = [ NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: nil ]; NSMutableArray * array = [dic valueForKey:@ "data" ]; for ( NSMutableDictionary * dic in array) { _right = [[RightModel alloc]init]; [_right setValuesForKeysWithDictionary:dic]; [ self .detailsSourceArray addObject:_right]; [_right release]; } }]; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】