Xcode IOS GData库解析XML
IOS官方没有专门提供解析XML的库,所以需要借助第三方库来解析XML,这里介绍其中其中一种解析方法-----Google提供的在IOS平台上解析XML的开源库GDataXML,特点解析效率高,使用方便.下载地址:http://pan.baidu.com/s/1dD3st7F
ps:iOS有解析xml的方法, http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project,但是效率低,使用不方便
1. 首先将下载的GData文件夹(里面包含GDataXmlNode.h和GDataXMLNode.m文件)拖拽到项目中,注意要选中"Copy items into destination group's folder",不要只是简单的引用
2. 选中项目根节点 --> 进入右边的Build Phases选项卡 --> 选第3个 (Link Binary With Libraries),点+号添加
-->输入"libxml"搜索 --> 选中第2个(libxml2.dylib) --> Add
3. 选择"Build Settings"选项卡, 在搜索框中输入"gar",关闭ARC功能, 原因是GData库开发的比较早,不支持ARC
4. 还是在"Build Settings"选项卡, 在搜索框中输入"header search",点第二个(Header Search Paths)右侧,弹出框中点+号,输入"usr/include/libxml2"
5. 还是在"Build Settings"选项卡, 在搜索框中输入"other linker",点第二个Other Linker Flags右侧,输入"-lxml2"
到这里第三方库配置完成!
//获取xml格式数据路径,文件扩展名不一定要xml, 只要里面的内容是xml格式就可以,但是文件中第一行一定要是<?xml version="1.0" encoding="utf-8"?> 不能有空白行,否则会报错
NSString *strPath = [[NSBundle mainBundle] pathForResource:@"sns" ofType:@"txt"];
//加载数据到内存中
NSData *data = [NSData dataWithContentsOfFile:strPath];
NSError *error= nil;
//将data原始数据格式转换为xml文档格式
//将xml文本数据转化为GDataXMLDocument类的对象
//并且将xml文件转化为GDataXMLDocument内管理的树形内存数据
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:&error];
NSLog(@"xml parse error = %@",error);
//获得xml文件的根节点
GDataXMLElement *rootElem = [doc rootElement];
//获得根节点所有名字为count的节点,所有返回值为数组
NSArray *arrayCount = [rootElem elementsForName:@"count"];
//获得数组中的最后一个<count>节点,因为只有一个,所以arrayCount中只有一个元素
GDataXMLElement *countElem = [arrayCount lastObject];
//获得<count>节点的值
NSString *strCount = [countElem stringValue];
NSLog(@"<count> = %@",strCount);
//获得唯一的<user_list>根节点
GDataXMLElement *userListElem = [[rootElem elementsForName:@"user_list"] lastObject];
//获得<user_list>根节点下的<user>子节点
NSArray *arrayUser = [userListElem elementsForName:@"user"];
//遍历<user_list>根节点下的5个<user>节点
for (GDataXMLElement *userElem in arrayUser)
{
NSMutableDictionary *dicUser = [[NSMutableDictionary alloc] init];
// 获得<user>节点下的<username>节点
GDataXMLElement *userName = [[userElem elementsForName:@"username"] lastObject];
//取得<username>节点的值
NSString *strUname = [userName stringValue];
//获得<user>节点下的<realname>节点
GDataXMLElement *userRealNameElem = [[userElem elementsForName:@"realname"] lastObject];
//取得<realname>节点的值
NSString *strRname = [userRealNameElem stringValue];
//......
}