GData旨在解析XML文档。
(1)添加头文件搜索路径
Header Search Paths>/usr/include/libxml2
(2)添加二进制库
Link library -> libxml2.dylib
(3)源文件添加编译选项
-fno-objc-arc
(4)添加头文件
#import “GDataXMLNode.h"
语法:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
//配置XML库(配置完才能使用)
//(1)添加头文件搜索路径
// Header Search Paths-> /usr/include/libxml2
//(2)添加二进制库
// Link library -> lixml2.dylib
//(3)源文件添加编译选项
// -fno-objc-arc
//(4)添加头文件
// #import "GDataXMLNode.h"
//如何使用GData开源库解析XML文件
//重点: 如何读取其中的数据
//获取文件路径
NSString *file = [[NSBundle mainBundle] pathForResource:@"xml.txt" ofType:nil];
NSData *data = [[NSData alloc] initWithContentsOfFile:file];
//<1>解析XML文件
//GData中把一个XML当做一个文档Document
//注意: 这一句已经完成了解析的过程
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
if(doc == nil)
{
NSLog(@"解析失败!");
return;
}
//<2>如何获取XML的数据?
//实例:
// 获取CityName结点的名字和其中的值
// XPath语法: 快速获取某个结点
//位置: /root/systemConfig/CityName
NSArray *array = [doc nodesForXPath:@"/root/systemConfig/CityName" error:nil];
//取出其中的结点
GDataXMLElement *element = [array firstObject];
//<CityName>北京</CityName>
//获取节点名
NSLog(@"name = %@",element.name);
NSLog(@"value = %@",element.stringValue);
//<3>如何获取结点的属性
//实例: 拿到ComeChannel中两个Item的所有属性
array = [doc nodesForXPath:@"/root/systemConfig/ComeChannel/Item" error:nil];
NSLog(@"count = %ld",array.count);
GDataXMLElement *item1 = array[0];
//获取属性
//注意: 一个结点可以有多个属性
// 一个结点所有属性存储attributes中
for(GDataXMLElement *attr in item1.attributes)
{
//显示属性名和属性值
NSLog(@"attr name: %@, value: %@",attr.name,attr.stringValue);
}
//<4>获取所有的Item结点(不管item在哪儿)
// 语法//Item表示获取所有Item结点
array = [doc nodesForXPath:@"//Item" error:nil];
NSLog(@"item count=%ld",array.count);
for (GDataXMLElement *element in array) {
NSLog(@"item-> %@",element.name);
}
//<5>获取所有名字为value的属性(而不管这个属性在哪儿)
array = [doc nodesForXPath:@"//@value" error:nil];
for (GDataXMLElement *element in array) {
NSLog(@"value-> %@",element.stringValue);
}
//<6>XML的遍历
//获取根结点
GDataXMLElement *root = doc.rootElement;
NSLog(@"rootName: %@",root.name);
//获取结点的子节点个数
long count = root.childCount;
//实例: 获取root的子结点
array = root.children;
//通过子节点的名字获取子结点
array = [root elementsForName:@"systemConfig"];
}