iOS-Senior6-数据解析(XML)

1.解析的基本概念

定义:从事先规定好的格式中提取数据

解析前提:提前约定好格式,数据提供方按照格式提供数据,数据获取方则按照格式获取数据

iOS开发常见的解析:XML解析,JSON解析

2.XML数据结构

XML:可扩展标记语言,主流数据格式之一,可以用来存储和传输数据。

功能:数据交换,内容管理,用作配置文件

语法:

1.声明

2.节点使用一对标签表示:起始和结束标签

3.根节点是起始节点,只有一个,节点可以嵌套

4.节点可以有值,存储在一对儿标签中

实例:

3.进行XML解析时使用到的SAX文件


SAX:Simple API for XML.基于事件驱动的解析方式,逐行解析数据(采用协调回调机制)

1.NSXMLParser是iOS自带的xml解析类,采用SAX方式解析数据

2.解析过程由NSXMLParserDelegate协议方法回调

3.解析过程:开始标签 ->取值 ->结束标签 ->取值

源代码:

系统SAX解析:(结果使用一个数组存储,里面包含每个字典)

//1.获取文件路径

NSString *filePath = [[NSBundle mainBundle] [email protected]"Studentlnfor_xml" ofType:@"txt"];

//2.获取出NSData类型的数据

NSData *data = [NSData dataWithContentsOfFile:filePath];

NSLog(@"data = %@",data);

//3.设置SAX文件,并关联相关的xml文件

NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

//4.设置代理

parser.delegate = self;

//5.开始解析

[parser parser];

#pragma mark - NSXMLParserDelegate协议方法

//1.开始文档解析

- (void)parserDidStartDocument:(NSXMLParser *)parser {

//在这个方法里初始化数组(也可以懒加载)

self.dataArray = [NSMutableArray array];

}

//2.开始解析标签

-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *>*)attributeDict {

//根据需求需要的标签去获取相关的数据

if([elementName isEqualToString:@"student"]) {

Student *stu = [[Student alloc] init];

//在这里不需要赋值操作,将数据对象添加到数组中

[self.dataArray addObject:stu];

NSLog(@"%@",self.dataArray);

}

//将当前的标签值传给刚才声明的一个属性

self.currentElement = elementName;

}

#pragma mark - 3.解析标签中的内容然后赋值给对象

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

//从数组中取出相关的student对象,每次从数组中取出最后一个元素,保证每次取出最新的对象内容

Student *stu = [self.dataArray lastObject];

//kvc赋值

[stu setValue:string forKey:self.currentElement];

}

#pragma mark - 4.结束标签

- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

self.currentElement = nil;

}

#pragma mark - 5.结束文档解析

- (void)parserDidEndDoucument:(NSXMLParser *)parser {

//取出数组校验

for(Student *student in self.dataArray) {

NSLog(@"name = %@,gender = %@,age = %ld,hobby = %@",student.name,student.gender,student.age,student.hobby);

}

}

#pragma mark - 6.错误处理

- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {

NSLog(@"出错了:error = %@",parseError);

}

//第二种方法:使用DOM解析

//使用第三方:GDataXMLNode(谷歌)

1.需要引入一个动态库(libxml2.tbd)

2.获取文件路径(同上)

3.获取data数据(同上)

//4.初始化存储数据的数组

self.dataArray = [NSMutableArray array];

//5.设置dom解析(创建解析文档)

GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];

//6.获取根节点(文档为根节点)

GDataXMLElement  *rootElement = document.rootElement;

//7.变量获取相对应的子节点(studens是子节点,文档才是父节点)

for(GDataXMLElement *studentElement in rootElement.children) {

Student *student = [[Student alloc]init];

for(GDataXMLElement *stuElement in   studentElement.children) {

[stu setVslue:stuElement.stringValue forKey:stuElement];

}

[self.dataArray addObject:stu];

//循环显示

for(Student *student in self.dataArray) {

NSLog(@"name = %@,gender = %@,age = %ld,hobby = %@",student.name,student.gender,student.age,student.hobby);

}

}

3.使用DOM解析

(1)设置Build Settings 里的Header Search Paths 添加 /user/include/libxml2

设置Build Settings里的Other Linker Flags 添加-lxml2

(2)设置Build Phases 里的GDataXMLNode,添加 -fno-objc - arc

时间: 2024-10-01 08:30:15

iOS-Senior6-数据解析(XML)的相关文章

iOS 网络数据之XML解析

<pre name="code" class="objc"><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size:14px;"><span style="background-color: rgb(255, 255, 255);"></span>

ios json数据解析

刚刚下午那会 弄了个 解析 xml  demo的小例子,本想着json也挺复杂 弄还是 不弄,但是简单的看了下 发现挺简单,这个时候就犹豫了,要不写到博客上来 ? 考虑了很久,还是写上来吧,毕竟json用得太多了,而且算是自己的积累吧,毕竟刚开始学习IOS开发方面的知识,就当是巩固了撒! 还是 先看个效果图吧,如下! 接下来 看下工程目录吧,其实并没有必要,直接建立一个工程就行 ,算了,还是贴上来吧,如下: 工程目录中有个 Notes.json 文件,该文件就是 要解析的json数据了 ,也截下

iOS中的数据解析(XML,JSON),SAX解析,DOM解析

第三方 SAT解析 #import "SAXTableViewController.h" #import "Student.h" @interface SAXTableViewController ()<NSXMLParserDelegate> @property (nonatomic, retain) NSMutableArray *dataSourse; // 存储学生对象 @property (nonatomic, retain) Student

iOS开发之解析XML格式数据

XML格式的数据是一种数据的传输格式.因为它方便编写.结构清晰,所以深受程序猿的喜爱,非常多人都喜欢使用XML格式数据传输或者作为程序的配置信息. 如今我将来实如今iOS中解析XML格式数据,语言使用Swift. 首先自己写一个简单的XML: <data> <person age="15">zhangsan</person> <person age="2">lisi</person> <person&

iOS之数据解析之XML解析

XML解析常见的两种方式:DOM解析和SAX解析 DOM解析 DOM:Document Object Model(文档对象类型).解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历数结构可以检索任意XML节点,读取它的属性和值,而且通常情况下,可以借助XPath,直接查询XML节点. 进行DOM方式解析数据需要使用一个第三方的类GDataXMLNode GDataXMLNode是Google提供的开源XML解析类,对libxml2.tbd进行了Objective-C的

iOS网络数据解析

iOS开发过程中,网络数据的传输过程一般是:客户端发送请求给服务器,服务器接收到客户端发送的网络请求后返回相应的数据.此时客户端需要把服务器返回的数据转化为前段和移动端开发中使用的数据格式(如OC/java).后台服务器一般使用php.java..net进行开发,而前段和移动端使用的一般是OC/JAVA/HTML/CSS/JS,做好前后端的数据交互极为重要,如今数据交互常用的就是JSON和XML.下面就iOS开发过程中的JSON解析和XML解析进行简单的说明. 一.JSON解析 JSON是一种轻

第十五讲.数据解析(XML与JSON两种数据解析)

一.XML数据解析 1.SAX:Simple API for XML.基于事件驱动的解析方式,逐行解析数据.(采用协议回调机制) NSXMLParser的解析方法: 1 #import "ViewController.h" 2 #import "Model.h" 3 4 @interface ViewController ()<NSXMLParserDelegate> 5 6 @property(nonatomic,strong)UITableView

iOS开发之解析XML

xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundation/Foundation.h> @interface FKBook : NSObject @property (nonatomic , assign) NSInteger bookID; @property (nonatomic , copy) NSString *title; @property

iOS网络数据解析之XML解析-GDataXML

GDataXML 第三方xml解析框架 DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件 GDataXML中常用的类 GDataXMLDocument: 代表整个XML文档 GDataXMLElement: 代表文档中的每个元素 使用attributeForName:方法可以获得属性值 要使用GDataXML,先要对项目进行一些配置.1>导入libxml2动态库targets--Build Phases--link Binary With Libraries 2>设置libxm

iOS JSON 数据解析

JSON 是比较常用的数据格式,相比 XML 层次更清晰,这里介绍两种解析 JSON 的方式:NSJSONSerialization 和 JSONKit NSJSONSerialization 是 iOS 5 以后推出的,比较好用的 JSON 解析包. JSON 数据格式由对应的 '[',']' 和 '{','}',前者表示数组,后者表示字典. NSJSONSerialization 解析过程: 1.获取文件路径 2.获取文件内容 3.解析 简单小例子: 1 - (IBAction)parser