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