XML文件解析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
 

以上是关于XML文件解析的主要内容,如果未能解决你的问题,请参考以下文章

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

DOM解析xml文件

无法解析片段中的 findViewById [重复]

java解析xml的几种方式哪种最好?

Expat Parser解析xml文件

jsoup解析xml某片段的问题