iOS开发笔记23-解析XML JSON

XML示例

<students>

<student>

<name>kellen</name>

<pass>111111</pass>

</student>

<student>

<name>wch</name>

<pass>222222</pass>

</student>

</students> 

有开始就要有结束

首先新建项目

先在网上得到数据

用同步方法得到数据 

- (void)viewDidLoad {

    [super viewDidLoad];

 /**

     *先在网上得到数据

     **/

    NSString *strUrl = @"http://localhost/stuxml.xml";

    NSURL *url = [NSURL URLWithString:strUrl];

    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    NSURLResponse *response = nil;

    NSError *error = nil;

    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    

    if (!error) {

        NSLog(@"读到数据了,data = %@",data);

        /**

         *解析得到的数据

         **/

        

        

    }else{

    

        NSLog(@"%@",error.localizedDescription);

    }

    

    

    

}

 /**

         *解析得到的数据(XML)

         **/

        //1,创建xml的解析对象

        NSXMLParser *parser = [[NSXMLParser alloc]initWithData:data];

        //2,代理执行当前类之中的方法

        parser.delegate = self;

        //3,解析开始

        [parser parse];

解析结果

 

 

首先是这两个代理方法

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

    NSLog(@"开始解析");


}

-(void)parserDidEndDocument:(NSXMLParser *)parser

{


    NSLog(@"结束解析");

}

然后解析节点

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{


    NSLog(@"解析一个节点开始");


}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{


    NSLog(@"解析一个节点结束");



}

 最后读到值

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{


    NSLog(@"读到的值 ,放在str里面 str = %@",string);


}

二,几个代理方法的调用具体分析

首先是开始解析


-(void)parserDidStartDocument:(NSXMLParser *)parser

{

    NSLog(@"开始解析");

    

    

    /**

     *解析开始,需要对最外层的所有学生分配内存空间

     **/

    self.allStu = [[NSMutableArray alloc]init];


}

 然后读节点


- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName attributes:(NSDictionary<NSString *, NSString *> *)attributeDict{


    NSLog(@"解析一个节点开始,elementname = %@",elementName);


}


- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName

{


    NSLog(@"解析一个节点结束,elementname = %@",elementName);



}

在读节点的时候碰到value就读出来


- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

{


    NSLog(@"读到的值 ,放在str里面 str = %@",string);


}

最后结束解析


-(void)parserDidEndDocument:(NSXMLParser *)parser

{


    

    NSLog(@"结束解析");

    /**

     *得到所有的学生

     **/

    for (int i =0; i<self.allStu.count; i++) {

        NSLog(@"stu = %@",self.allStu[i]);

    }

    

}

输出结果

 



三,赋值

创建一个类


#import <Foundation/Foundation.h>


@interface Stu : NSObject

@property (nonatomic,copy)NSString *name;

@property (nonatomic,copy)NSString *pass;

 

@end 

原文地址:https://www.cnblogs.com/adodo/p/5219615.html