zoukankan      html  css  js  c++  java
  • XML文件解析

    对下图XML文件进行解析:
    person.xml
     
    可以把这个XML数据的根目录看做是一个数组,数组里存放了4个叫person的字典(这四个对象通过id来区分),字典里有三个键值对(name、personID、age)
     
    1.解析XML文件前的准备:
    (1)要实现 <NSXMLParserDelegate>协议。
     
     
    (2)实现几个代理方法:
    //1.开始解析
    -(void)parserDidStartDocument:(NSXMLParser *)parser
     
    //2.解析到一个元素
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
     
    //3.查看到一个元素的内容
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
     
    //4.解析节点结束
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
     
    (3)创建一个model类,用来接收上图中四个对象(看做是四个对象person1、person2person3person4
     
     
     
    2.开始解析XML文件
    第一步:获取xml文件
     
        NSString *path = [[NSBundle mainBundle]pathForResource:@"person" ofType:@"xml”]; //xml文件路径
       
        NSData *data = [NSData dataWithContentsOfFile:path]; //通过xml文件路径获取xml中的数据
       
        NSXMLParser *xml = [[NSXMLParser alloc]initWithData:data]; 
       
        xml.delegate = self; //当前类实现xml的代理


        [xml parse];//开始解析
     
     
    第二步:实现几个代理方法
     
    //1.开始解析
    -(void)parserDidStartDocument:(NSXMLParser *)parser{


        NSLog(@"开始解析");

    }
     
    //2.解析到一个元素(节点)
    <root>、  <person id="1> 、  <name>  这些都被称为节点。
    -(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{

        NSLog(@"解析到一个节点:%@",elementName);
       
        if ([elementName isEqualToString:@"person"]) {
           
            _model = [[Model alloc]init];
           
        }
      
    }

    //3.查看到一个元素的内容(节点和斜杠节点之间的内容jack)   <name>jack</name>
     
    -(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{


        NSLog(@"查看到一个元素的内容:%@",string);
       
        _str = string;
     
    }
     
    //4.解析节点结束   遇到带斜杠的节点(</name>),会进入这个方法 
    -(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{

        NSLog(@"该节点结束解析:%@",elementName);
       
        if ([elementName isEqualToString:@"root"]) {  //   遇到</root> 节点                        
           
            NSLog(@"The End");
        }else if ([elementName isEqualToString:@"person"]){
        
             //   遇到</person>节点           
            //一组数据结束(本xml文件一共四组)
           
            [_array addObject:_model]; //一个model对象被添加到数组
           
       
        }else{
        
          //   遇到</name>        </personID>  </age>节点,说明已经读取到name、 personID 或者age的数据 _str了,在这里用KVC给model对象赋值     
        //elementName = name、 personID 或者age
           
            [_model setValue:_str forKey:elementName]; //用KVC给model对象赋值     
        
        }
        
    }
     
    打印结果:
    2016-01-23 10:17:09.115 1.22 xml数据存储[1118:30883] 开始解析
    2016-01-23 10:17:09.115 1.22 xml
    数据存储[1118:30883] 解析到一个节点:root
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 解析到一个节点:person
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 解析到一个节点:name
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:jack
    2016-01-23 10:17:09.116 1.22 xml
    数据存储[1118:30883] 该节点结束解析:name
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 解析到一个节点:personID
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:2015
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 该节点结束解析:personID
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.117 1.22 xml
    数据存储[1118:30883] 解析到一个节点:age
    2016-01-23 10:17:09.118 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:20
    2016-01-23 10:17:09.118 1.22 xml
    数据存储[1118:30883] 该节点结束解析:age
    2016-01-23 10:17:09.118 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.118 1.22 xml
    数据存储[1118:30883] 该节点结束解析:person
    2016-01-23 10:17:09.183 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 解析到一个节点:person
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 解析到一个节点:name
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:rose
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 该节点结束解析:name
    2016-01-23 10:17:09.184 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 解析到一个节点:personID
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:2016
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 该节点结束解析:personID
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 解析到一个节点:age
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:18
    2016-01-23 10:17:09.185 1.22 xml
    数据存储[1118:30883] 该节点结束解析:age
    2016-01-23 10:17:09.186 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.186 1.22 xml
    数据存储[1118:30883] 该节点结束解析:person
    2016-01-23 10:17:09.212 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.212 1.22 xml
    数据存储[1118:30883] 解析到一个节点:person
    2016-01-23 10:17:09.212 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.212 1.22 xml
    数据存储[1118:30883] 解析到一个节点:name
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:tom
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 该节点结束解析:name
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 解析到一个节点:personID
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:2017
    2016-01-23 10:17:09.213 1.22 xml
    数据存储[1118:30883] 该节点结束解析:personID
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 解析到一个节点:age
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:19
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 该节点结束解析:age
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 该节点结束解析:person
    2016-01-23 10:17:09.214 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.215 1.22 xml
    数据存储[1118:30883] 解析到一个节点:person
    2016-01-23 10:17:09.313 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 解析到一个节点:name
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:jerry
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 该节点结束解析:name
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 解析到一个节点:personID
    2016-01-23 10:17:09.314 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:2018
    2016-01-23 10:17:09.315 1.22 xml
    数据存储[1118:30883] 该节点结束解析:personID
    2016-01-23 10:17:09.315 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
           
    2016-01-23 10:17:09.315 1.22 xml
    数据存储[1118:30883] 解析到一个节点:age
    2016-01-23 10:17:09.315 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:21
    2016-01-23 10:17:09.315 1.22 xml
    数据存储[1118:30883] 该节点结束解析:age
    2016-01-23 10:17:09.316 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
       
    2016-01-23 10:17:09.316 1.22 xml
    数据存储[1118:30883] 该节点结束解析:person
    2016-01-23 10:17:09.316 1.22 xml
    数据存储[1118:30883] 查看到一个元素的内容:
    2016-01-23 10:17:09.316 1.22 xml
    数据存储[1118:30883] 该节点结束解析:root
    2016-01-23 10:17:09.317 1.22 xml数据存储[1118:30883] The End
     
  • 相关阅读:
    【转】想成为为一名架构师,应该掌握哪些技术呢?
    【转】每个好架构师都是一位出色的程序员
    [LeetCode] 597. Friend Requests I: Overall Acceptance Rate 朋友请求 I: 全部的接受率
    [LeetCode]577. Employee Bonus 员工奖金
    570. Managers with at Least 5 Direct Reports 至少有5个直接汇报员工的经理
    [LeetCode] 529. Minesweeper 扫雷
    Generate Maximum revenue by selling K tickets from N windows
    [LeetCode] 311. Sparse Matrix Multiplication 稀疏矩阵相乘
    [LeetCode] 689. Maximum Sum of 3 Non-Overlapping Subarrays 三个非重叠子数组的最大和
    [LeetCode] 403. Frog Jump 青蛙跳
  • 原文地址:https://www.cnblogs.com/zh-li/p/5153005.html
Copyright © 2011-2022 走看看