iOS开发3-使用DOM(GData)解析XML数据
使用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); }
有问题请联系博主,邮箱:nathanlee1987@aliyun.com