GDataXMLNode是Google提供的开源XML解析类,对libxml2.dylib进行了Objective-C的封装
采用DOM方式解析数据
iOS中包含一个C语言的动态链接库libxml2.dylib,解析速度比NSXMLParer快(NSXMLParer解析参照:iOS之NSXMLParser对XML解析)
首先下载第三方包,并导入工程
链接: http://pan.baidu.com/s/1sjOGfId 密码: ue9v
这个时候,编译一下工程,会报错
提示用户:#import <libxml/tree.h>文件找不到,这里我们看GDataXMLNode.h文件上方的提示:
// libxml includes require that the target Header Search Paths contain
//
// /usr/include/libxml2
//
// and Other Linker Flags contain
//
// -lxml2
可见我们需要配置两个属性
一、在Header Search Paths中包含"/usr/include/libxml2"
二、在Other Linker Flags中包含“-lxml2”
Other Linker同样的操作
配置完后,编译工程,如果还报错的话:我们就需要配置MRC与ARC混编
这样就ok了。
下面来看看怎么使用GDataXMLNode解析XML文件
XML文件结构如下
<?xml version="1.0" encoding="UTF-8" ?>
<students>
<student type="CEO">
<name>zhangsan001</name>
<age>18</age>
<gender>man</gender>
</student>
<student>
<name>zhangsan002</name>
<age>10</age>
<gender>woman</gender>
</student>
<student>
<name>zhangsan003</name>
<age>12</age>
<gender>manman</gender>
</student>
</students>
解析过程:
// 1.获取文件路径
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"xml"];
// 2.获取数据
NSData *data = [NSData dataWithContentsOfFile:filePath];
// 3.创建解析对象
GDataXMLDocument *dataXmlDocument = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
// 3.1获取根节点
GDataXMLElement *rootElement = dataXmlDocument.rootElement;
// 初始化大数组
_allDataArray = [NSMutableArray array];
// 4.遍历根节点,获取所有代表学生的节点
for (GDataXMLElement *stuElement in rootElement.children) {
// 4.1创建学生对象
Student *stu = [Student new];
// 4.2遍历学生节点下的name、age、gender子节点
for (GDataXMLElement *valueElement in stuElement.children) {
// 4.3使用KVC给stu对象赋值
[stu setValue:valueElement.stringValue forKey:valueElement.name];
}
// 4.4将stu对象添加到大数组中
[_allDataArray addObject:stu];
}
NSLog(@"%@", _allDataArray);
执行结果
2015-06-23 15:42:13.181 Lesson_15_xml[4233:198463] (
"name = zhangsan001 age = 18 gender = man",
"name = zhangsan002 age = 10 gender = woman",
"name = zhangsan003 age = 12 gender = manman"
)
下一章:JSON解析