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 

  • 相关阅读:
    git
    *** errRun
    Centos与Debian的安装命令
    HTML基础
    基本的SQL语言
    phpstudy靶场搭建
    Centos7下搭建服务器(apache+mysql+php)
    Centos7设置yum源
    Linux基础
    一个服务器中搭建多个站点
  • 原文地址:https://www.cnblogs.com/adodo/p/5219615.html
Copyright © 2011-2022 走看看