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
 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值