GData旨在解析XML文档。
什么是 XML?
- XML 指可扩展标记语言(EXtensibleMarkupLanguage)
- XML 是一种标记语言,很类似 HTML
- XML 的设计宗旨是传输数据,而非显示数据
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是W3C 的推荐标准
Header Search Paths>/usr/include/libxml2
(2)添加二进制库
Link library -> libxml2.dylib
-fno-objc-arc
#import “GdataxMLNode.h"
语法:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view,typically from a nib.
//配置XML库(配置完才能使用)
// Header Search Paths-> /usr/include/libxml2
//(2)添加二进制库
// Link library -> lixml2.dylib
// -fno-objc-arc
// #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结点的名字和其中的值
//位置: /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);
//实例: 拿到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"];
}