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 

  • 相关阅读:
    微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
    设置API:wx.openSetting,wx.getSetting使用说明(示例:地图授权与取消授权后的重新授权)
    微信小程序之上传图片和图片预览
    微信小程序上传图片(前端+PHP后端)
    微信小程序拒绝授权后重新拉起授权窗口
    微信小程序如何使用 Git 实现版本管理和协作开发
    配置同时使用 Gitlab、Github、Gitee(码云) 共存的开发环境
    linux 系统下Anaconda的安装【安装python3.6环境首选】
    利用phpqrcode二维码生成类库合成带logo的二维码并且用合成的二维码生成海报(二)
    利用phpqrcode二维码生成类库和imagecopymerge函数制拼接图片的经验(一)
  • 原文地址:https://www.cnblogs.com/adodo/p/5219615.html
Copyright © 2011-2022 走看看