您的位置:首页 > 移动开发 > IOS开发

iOS开发3-使用DOM(GData)解析XML数据

2015-10-20 19:19 633 查看
使用DOM解析XML

DOM= Document Object Model,文档对象模型,DOM可以以一种独立于平台和语言的方式访问和修改一个文档的内容和结构。
换句话说,这是表示和处理一个HTML或XML文档的常用方法。有一点很重要,DOM的设计是以对象管理组织(OMG)的规约为基础的,因此可以用于任何编程语言。
GDataXMLNode是Google提供的用于XML数据处理的类集。
该类集对libxml2--DOM处理方式进行了封装,能对较小或中等的xml文档进行读写操作且支持XPath语法。
导入GDataXMLNode.h和GDataXMLNode.m要注意设置
target Header Search Paths contain

/usr/include/libxml2

Other Linker Flags contain

-lxml2





如果工程使用ARC,还要设置ARC和MRC兼容。



//解析XML
//DOM 树型解析(GData来自谷歌的解析工具,推荐使用)数据少的时候使用
// NSLog(@"%@",self.dataArray);
self.dataArray=[NSMutableArray array];
NSString * filePath=[[NSBundle mainBundle]pathForResource:@"data_XML1" ofType:@"txt"];

//data
NSData * data=[NSData dataWithContentsOfFile:filePath];

//将文件内容读取到document对象中--(树)
GDataXMLDocument *document=[[GDataXMLDocument alloc]initWithData:data options:0 error:nil];

//获取根节点
GDataXMLElement *rootElement=document.rootElement;

//第1种 data_XML1.txt情况
//遍历子节点
for (GDataXMLElement *e in rootElement.children) {
//继续遍历
//model对象保存值
Message *m=[[Message alloc]init];

for (GDataXMLElement *e1 in e.children)
{[m setValue:e1.stringValue forKey:e1.name]; }

[self.dataArray addObject:m];
}

//第2种
self.dataArray2=[NSMutableArray array];
NSString * filePath2=[[NSBundle mainBundle]pathForResource:@"data_XML2" ofType:@"txt"];

//data
NSData * data2=[NSData dataWithContentsOfFile:filePath2];

//将文件内容读取到document对象中--(树)
GDataXMLDocument *document2=[[GDataXMLDocument alloc]initWithData:data2 options:0 error:nil];

//获取根节点
GDataXMLElement *rootElement2=document2.rootElement;

for (GDataXMLElement * e in rootElement2.children) {

//NSLog(@"%@",e.attributes);//e.attributes

//所有的属性都被放到一个数组中,是GDataXMLNode类型
//for (GDataXMLNode *d    in e.attributes)
//{NSLog(@"%@,%@",d.name,d.stringValue);  }

Message * m=[[Message alloc]init];
for (GDataXMLNode *d in e.attributes)
{[m setValue:d.stringValue forKey:d.name];}
//存入数组
[self.dataArray2 addObject:m];

}

//显示解析得到的文档
NSLog(@"第一种");

for (Message *m in self.dataArray) {

NSLog(@"sender:%@",m.sender);
NSLog(@"receiver:%@",m.receiver);
NSLog(@"content:%@",m.content);
NSLog(@"date:%@",m.date);
}

//显示解析得到的文档
NSLog(@"第二种");
for (Message *m in self.dataArray2) {

NSLog(@"sender:%@",m.sender);
NSLog(@"receiver:%@",m.receiver);
NSLog(@"content:%@",m.content);
NSLog(@"date:%@",m.date);
}


代码下载(Xcode7.0.1)

有问题请联系博主,邮箱:nathanlee1987@aliyun.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: