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数据格式介绍)的更多相关文章

  1. iOS阶段学习第29天笔记(UITextField的介绍)

    iOS学习(UI)知识点整理 一.关于UITextField的介绍 1)概念: UITextField 是用于接收用户输入的一个控件 2)UITextField  初始化实例代码: //创建一个UIt ...

  2. iOS阶段学习第28天笔记(UIView的介绍)

    iOS学习(UI)知识点整理 一.关于UIVIew 的介绍 1)概念:UIView 是用于装载并展示各类控件的大容器,是iOS中所有UI控件的基类 2)UIView  初始化实例代码 UIView * ...

  3. iOS阶段学习第27天笔记(UIButton-UIImageView的介绍)

    iOS学习(UI)知识点整理 一.关于UIButton的介绍 1)概念:UIButton 是一种常用的控件,通过点击触发相应的功能 2)UIButton 的几种常用的状态        1.UICon ...

  4. iOS阶段学习第35天笔记(Touch手势介绍)

    一.Touch手势 1.利用手势实现UIButton移动效果  实例代码 1) 创建一个继承自UIButton的类 MyButton.h  代码实现 #import <UIKit/UIKit.h ...

  5. iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)

    iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器  实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...

  6. iOS阶段学习第15天笔记(NSDate操作)

    iOS学习(OC语言)知识点整理 一.OC关于NSDate类的操作实例代码 //默认直接显示对象,显示的是格林威治时间 //获取当前日期时间的实例方法 NSDate *date1=[[NSDate a ...

  7. iOS阶段学习第14天笔记(NSString与NSMutableString)

    iOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableStr ...

  8. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  9. iOS 阶段学习第七天笔记(函数、递归)

     iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1  形参名1,形参类型2   形参名2 ...

随机推荐

  1. 自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析

    自制Unity小游戏TankHero-2D(4)关卡+小地图图标+碰撞条件分析 我在做这样一个坦克游戏,是仿照(http://game.kid.qq.com/a/20140221/028931.htm ...

  2. Lock,LockFree,MemoryBarrier,ConcurrentCollection

    最近看并行编程书本的一些心得,简单记录下多线程和并行编程必知必会的几个概念,再次加深自己的理解. .NET Framework4提供了一个新的命名空间System.Collections.Concur ...

  3. 自定义 Azure Table storage 查询过滤条件

    本文是在Azure Table storage 基本用法一文的基础上,介绍如何自定义 Azure Table storage 的查询过滤条件.如果您还不太清楚 Azure Table storage ...

  4. VUE 意淫笔记

    caihg Vue.js 递归组件实现树形菜单 最近看了 Vue.js 的递归组件,实现了一个最基本的树形菜单. 项目结构: main.js 作为入口,很简单: 1 2 3 4 5 6 7 8 9 i ...

  5. Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串

    Atiti 重定向标准输出到字符串转接口adapter stream流体系 以及 重定向到字符串 原理::syso  向ByteArrayOutputStream这个流理想write字节..然后可以使 ...

  6. C++11模板类使用心得

    1.推荐使用std::shared_ptr<TaskT>代替指针TaskT*使用,shared_ptr是一种智能指针,能自主销毁释放内存,在c++11中被引入,在多线程编程中有很大的用处, ...

  7. KendoUI系列:Grid

    1.基本使用 <div id="grid"></div> <link href="@Url.Content("~/Content/ ...

  8. Oracle 11g系列:数据表对象

    Oracle数据库的下一层逻辑结构并非数据表,而是表空间.每个数据表都属于唯一的表空间. 1.Oracle表空间 与数据表相同,Oracle表空间是一个逻辑对象,而非物理对象,是数据库的组成部分.当使 ...

  9. Ajax在IE浏览器会出现中文乱码解决办法

    在AJAX浏览器来进行发送数据时,一般它所默认的都是UTF-8的编码. Ajax在IE浏览器会出现中文乱码的情况!解决办法如下 <script type="text/javascrip ...

  10. java匿名类和匿名对象及this的其他用法

    /* 匿名内部类:就是内部类的简写格式. 必须前提:内部类必须继承或者实现一个类或者接口. 匿名内部类其实就是一个匿名 子类对象. 格式:new 父类对象 or 接口(){ 子类内容:(覆盖父类的, ...