XML数据解析

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"];

你可能感兴趣的:(XML数据解析)