iOS阶段学习第23天笔记(XML数据格式介绍)

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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数据实例代码:

1#import"GDataXMLNode.h"2intmain(intargc,constchar*argv[]) {3@autoreleasepool {4//1、读取xml数据5NSData *data=[NSData dataWithContentsOfFile:@"/Users/Shared/ftp/book.txt"];

6//将xml数据加载到内存中创建GDataXMLDocument对象7GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];

8//获取根标记9GDataXMLElement *root=[doc rootElement];

10//在标记中根据子标记的名字获取子标记(返回数组,因为只有一个books子标记)11GDataXMLElement *booksElement=[[root elementsForName:@"books"] firstObject];

12//获取books下的所有book标记(数组)13NSArray *bookArray=[booksElement elementsForName:@"book"];

14//遍历每个book标记15for(GDataXMLElement *bookinbookArray){16GDataXMLElement *nameElement=[book elementsForName:@"name"][0];

17//stringValue获取标记的内容字符串18NSLog(@"%@",[nameElement stringValue ]);

19//获取book标记下的auther子标记20GDataXMLElement *autherElement=[book elementsForName:@"auther"][0];

21//获取auther标记下的子标记name(只有一个)22GDataXMLElement *autherNameElement=[autherElement elementsForName:@"name"][0];23NSLog(@"auther name:%@",[autherNameElement stringValue]);

24//获取book的id属性对象25GDataXMLNode *idNode=[book attributeForName:@"id"];26//[idNode stringValue]取属性值27NSLog(@"id:%@",[idNode stringValue]);28}29}30return0;31}

5)xPath表达式:字符串表达式,快速查找某一个标记

1、/:表示从根标记开始解析

2、//:表示任意位置的标记,满足条件

3、./:表示当前标记

4、@:获取标记的属性

6)使用xPath解析XML数据实例代码

1NSData *data=[NSData dataWithContentsOfFile:path];2//1、GDataXMLDocument对象3GDataXMLDocument *doc=[[GDataXMLDocument alloc]initWithData:data error:nil];4//2、获取根标记5GDataXMLElement *root=[doc rootElement];67//返回任意标记下的所有的book标记8NSArray *bookArray=[root nodesForXPath:@"//book"error:nil];910//遍历所有的book标记,每个book标记描述的一本书,需要取出封装成对象11for(GDataXMLElement *bookinbookArray){12BookItem *item=[[BookItem alloc]init];1314//@"./name":返回当前(book)标记下的name标记15GDataXMLElement *nameElement=[book nodesForXPath:@"./name"error:nil][0];16item.name=nameElement.stringValue;1718//取book标记下的PRice标记19GDataXMLElement *priceElement=[book elementsForName:@"price"][0];20item.price=[priceElement stringValue];2122//取当前(book)标记下的auther标记下的name标记23GDataXMLElement *autherNameElement=[book nodesForXPath:@"./auther/name"error:nil][0];24item.autherName=[autherNameElement stringValue];2526//获取book结点的id属性对象,取值27GDataXMLNode *idNode=[book attributeForName:@"id"];28item.ID=[idNode stringValue];2930//取当前(book)标记的language属性对象31GDataXMLNode *languageNode=[book nodesForXPath:@"./@language"error:nil][0];32item.language=[languageNode stringValue];33[_bookArray addObject:item];34}3536NSArray *nameArray=[root nodesForXPath:@"//auther/name"error:nil];37for(GDataXMLElement *nameinnameArray){38NSLog(@"name:%@",[name stringValue]);39}40NSLog(@"**********");4142//获取任意标记下的book标记,并且book中的子标记的price字符串值>10043GDataXMLElement *book2=[root nodesForXPath:@"//book[price>100]"error:nil][0];44NSLog(@"%@",[book2 stringValue]);

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航