zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/adodo/p/5219615.html
Copyright © 2011-2022 走看看