iOS 阶段学习第23天笔记(XML数据格式介绍)
iOS学习(OC语言)知识点整理
一、XML数据格式介绍
1)概念:xml是extensible markup language扩展的标记语言,一般用来表示、传输和存储数据
2)xml与json目前使用比较广泛的两种网络传输数据格式 两者分别占比:
1、 json:市场上占90%,轻量级的表示数据
2、xml:占10%,表示数据比较复杂
3)XML三种数据解析方法:
1、DOM解析:将整个xml数据加载到内存中,构造一个对象,从根结点开始一级一级的解析提取数据。缺点:如果数据大,
比较占内存,解析比较费时。 优点:可以修改xml数据
2、SAX解析:基于事件驱动的解析,读取xml数据的过程就是解析的过程,当读取到某个关键项(开始标记...)
时可以进行处理。优点:解析速度快。缺点:不能修改xml数据
3、使用第三方GData解析xml数据:
1)、导入第三方(GData)文件
2)、GData类使用了底层的libxml2库文件,需要设置头文件的搜索路径:在Build Settings中选择Header Search Paths,双击,
点击+,添加/Usr/include/libxml2
3)、添加二进制库文件:在Build Phases中点击Link Binary With Libraries,点+,选择 libxml2.dylib
4)使用GData 解析XML数据实例代码:
#import "GDataXMLNode.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1、读取xml数据
NSData *data=[NSData dataWithContentsOfFile:@"/Users/Shared/ftp/book.txt"];
//将xml数据加载到内存中创建GDataXMLDocument对象
GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];
//获取根标记
GDataXMLElement *root=[doc rootElement];
//在标记中根据子标记的名字获取子标记(返回数组,因为只有一个books子标记)
GDataXMLElement *booksElement=[[root elementsForName:@"books"] firstObject];
//获取books下的所有book标记(数组)
NSArray *bookArray=[booksElement elementsForName:@"book"];
//遍历每个book标记
for(GDataXMLElement *book in bookArray){
GDataXMLElement *nameElement=[book elementsForName:@"name"][];
//stringValue获取标记的内容字符串
NSLog(@"%@",[nameElement stringValue ]);
//获取book标记下的auther子标记
GDataXMLElement *autherElement=[book elementsForName:@"auther"][];
//获取auther标记下的子标记name(只有一个)
22 GDataXMLElement *autherNameElement=[autherElement elementsForName:@"name"][];
NSLog(@"auther name:%@",[autherNameElement stringValue]);
//获取book的id属性对象
GDataXMLNode *idNode=[book attributeForName:@"id"];
//[idNode stringValue]取属性值
NSLog(@"id:%@",[idNode stringValue]);
}
}
return ;
}
5)xPath表达式:字符串表达式,快速查找某一个标记
1、/:表示从根标记开始解析
2、//:表示任意位置的标记,满足条件
3、./:表示当前标记
4、@:获取标记的属性
6)使用xPath解析XML数据实例代码
NSData *data=[NSData dataWithContentsOfFile:path];
//1、GDataXMLDocument对象
GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];
//2、获取根标记
GDataXMLElement *root=[doc rootElement]; //返回任意标记下的所有的book标记
NSArray *bookArray=[root nodesForXPath:@"//book" error:nil]; //遍历所有的book标记,每个book标记描述的一本书,需要取出封装成对象
for(GDataXMLElement *book in bookArray){
BookItem *item=[[BookItem alloc]init]; //@"./name":返回当前(book)标记下的name标记
GDataXMLElement *nameElement=[book nodesForXPath:@"./name" error:nil][];
item.name=nameElement.stringValue; //取book标记下的price标记
GDataXMLElement *priceElement=[book elementsForName:@"price"][];
item.price=[priceElement stringValue]; //取当前(book)标记下的auther标记下的name标记
GDataXMLElement *autherNameElement=[book nodesForXPath:@"./auther/name" error:nil][];
item.autherName=[autherNameElement stringValue]; //获取book结点的id属性对象,取值
GDataXMLNode *idNode=[book attributeForName:@"id"];
item.ID=[idNode stringValue]; //取当前(book)标记的language属性对象
GDataXMLNode *languageNode=[book nodesForXPath:@"./@language" error:nil][];
item.language=[languageNode stringValue];
[_bookArray addObject:item];
} NSArray *nameArray=[root nodesForXPath:@"//auther/name" error:nil];
for(GDataXMLElement *name in nameArray){
NSLog(@"name:%@",[name stringValue]);
}
NSLog(@"**********"); //获取任意标记下的book标记,并且book中的子标记的price字符串值>100
GDataXMLElement *book2=[root nodesForXPath:@"//book[price>100]" error:nil][];
NSLog(@"%@",[book2 stringValue]);
iOS 阶段学习第23天笔记(XML数据格式介绍)的更多相关文章
- iOS阶段学习第29天笔记(UITextField的介绍)
iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField 初始化实例代码: //创建一个UIt ...
- iOS阶段学习第28天笔记(UIView的介绍)
iOS学习(UI)知识点整理 一.关于UIVIew 的介绍 1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类 2)UIView 初始化实例代码 UIView * ...
- iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)
iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态 1.UICon ...
- iOS阶段学习第35天笔记(Touch手势介绍)
一.Touch手势 1.利用手势实现UIButton移动效果 实例代码 1) 创建一个继承自UIButton的类 MyButton.h 代码实现 #import <UIKit/UIKit.h ...
- iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)
iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器 实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...
- iOS阶段学习第15天笔记(NSDate操作)
iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...
- iOS阶段学习第14天笔记(NSString与NSMutableString)
iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
随机推荐
- DNS 正向查找与反向查找
原创地址:http://www.cnblogs.com/jfzhu/p/3996323.html 转载请注明出处 所谓正向查找,就是说在这个区域里的记录可以依据名称来查找对应的IP地址.反向查找就是在 ...
- IOS Animation-Sprite Kit(一)基础
介绍 Sprite Kit是IOS7开始引入的,是一个高效率渲染的2D图形框架.它与绘制图形的Core Graphics以及用来管理GUI元素动画属性的Core Animation不同,Sprite ...
- offsetTop,offsetHeight,clientHeight,scrollHeight,scrollTop区别
这些高度相信很多同学都搞不清楚吧.这里我通过本地测试,发现了区别. 以聊天窗口为例. 元素(class='content')高度444px,其中上下padding分别是10px,margin为0.距离 ...
- SQL中group by的用法
group by即按照给定字段对结果集进行分组,从字面意义上理解就是根据"by"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个" ...
- H5常用代码:适配方案3
在H5项目中有一种常见的宣传页,就是那种整屏整屏的,带着炫丽进场动画的移动宣传页,不仅是一种欣赏也起到了很大宣传作用. 对于这种整屏的适配,前面通过视口的兼容处理也是可以做到的,但是在窄屏下会在上下有 ...
- spring之BeanFactory
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后 ...
- Leetcode 35 Search Insert Position 二分查找(二分下标)
基础题之一,是混迹于各种难题的基础,有时会在小公司的大题见到,但更多的是见于选择题... 题意:在一个有序数列中,要插入数target,找出插入的位置. 楼主在这里更新了<二分查找综述>第 ...
- Android限定EditText的输入类型为数字或者英文(包括大小写),EditText,TextView只能输入两位小数
Android限定EditText的输入类型为数字或者英文(包括大小写) // 监听密码输入框的输入内容类型,不可以输入中文 TextWatcher mTextWatcher = new Tex ...
- javascript语句——条件语句、循环语句和跳转语句
× 目录 [1]条件语句 [2]循环语句 [3]跳转语句 前面的话 默认情况下,javascript解释器依照语句的编写顺序依次执行.而javascript中的很多语句可以改变语句的默认执行顺序.本文 ...
- NYOJ995硬币找零(简单dp)
/* 题意:给你不同面额的硬币(每种硬币无限多),需要找零的面值是T,用这些硬币进行找零, 如果T恰好能被找零,输出最少需要的硬币的数目!否则请输出剩下钱数最少的找零方案中的最少硬币数! 思路:转换成 ...