zoukankan      html  css  js  c++  java
  • 网络解析

    1、xml解析--系统的SAX解析,逐行

        在 Build Phases中 Link Binary With Libraries 添加 libxml2.tbd,同时Build Settings 中搜索 header search paths 添加/usr/include/libxml2

        ①遵循NSXMLParserDelegate协议

        ②

     1 //1、获取文件路径
     2     NSString *path = [[NSBundle mainBundle]pathForResource:@"XML" ofType:@"txt"];
     3     
     4     //2、通过路径创建一个data对象
     5     NSData *data = [NSData dataWithContentsOfFile:path];
     6     
     7     //3、创建SAX解析使用的对象
     8     NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data];
     9     
    10     //4、遵循代理;
    11     xmlParser.delegate = self;
    12     
    13     //5、开始解析
    14     [xmlParser parse];

    #pragma mark ---NSXMLParserDelegate 方法---
    //1、开始解析XML文档
    - (void)parserDidStartDocument:(NSXMLParser *)parser{
        //准备数据(自动根据数组元素个数开辟空间最好先给0)
        self.dataArray = [NSMutableArray arrayWithCapacity:0];
        
    }
    
    //2、开始解析标签的方法
    /**
     *  @param parser        类
     *  @param elementName   标签名
     *  @param namespaceURI  <#namespaceURI description#>
     *  @param qName         <#qName description#>
     *  @param attributeDict <#attributeDict description#>
     */
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
        //获取到当前正在解析的标签,给标签属性赋值
        _currentElement = elementName;
        
        //如果当前解析到的标签值为“student”(model预建立)
        if ([elementName isEqualToString:@"student"]) {
            //创建并初始化model,并添加到数据源
            Student *stu = [Student new];
            [self.dataArray addObject:stu];
        }
    }
    
    
    //3、循环读取标签的值:这个方法,得到节点里面存的信息数据
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
        //将值存入model类对应的属性中,循环执行,需要取最后一个【包<student></student>是按照顺序扔进数组的,挨个进行取值,所有只取最后一个,说明全部取完】
        Student *stu = self.dataArray.lastObject;
        
        //根据当前已经解析出来的标签取到跟stu中属性对应的值,赋值给stu中的属性
        [stu setValue:string forKey:_currentElement];
    }
    
    
    //4、结束标签解析
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
        //没有标签,解析结束
        _currentElement = nil;
    }
    
    
    //5、结束解析文档
    - (void)parserDidEndDocument:(NSXMLParser *)parser{
        for (Student *stu in self.dataArray) {
            NSLog(@"%@",stu);
        }
    }
    
    
    //6、错误报告
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
        NSLog(@"错误报告  %@",parseError);
    }

    2、XML_DOM解析

        在 Build Phases中 Link Binary With Libraries 添加 libxml2.tbd,同时Build Settings 中搜索 header search paths 添加/usr/include/libxml2    另外:Build Phases 中 Compile Sources找到第三方GDataXMLNode.m文件,右侧添加-fno-objc-arc

    让其在ARC下运行

        ①引入第三方GDataXMLNode文件

        ②

    //1、获取文件路径
        NSString *path = [[NSBundle mainBundle]pathForResource:@"XML" ofType:@"txt"];
        
        //2、以data类型进行解析,将文件读入到data中
        NSData *data = [NSData dataWithContentsOfFile:path];
        
        //3、创建GDataXMLDocument 对象,此时XML文档内的所有节点,以树的形式存在于GDataXMLDocument 对象中
        GDataXMLDocument *xmlDocument = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
        
        //4、获取XML文档的根节点对象,根节点里包含了XML文档的所有内容
        GDataXMLElement *RootElement = [xmlDocument rootElement];
        
        //5、创建解析出来的学生数组
        self.dataArray = [NSMutableArray array];
        //遍历根节点<students>的所有子节点<student>
        for (GDataXMLElement *subElement in RootElement.children) {
            Student *stu= [Student new];
            //再遍历子节点<student>下的子标签<name><zi><say><weapon>取出子标签的内容,赋值给stu
            for (GDataXMLElement *contactElement in subElement.children) {
                
                /*
                //第一种赋值方法
                if ([contactElement.name isEqualToString:@"name"]) {
                    stu.name = contactElement.stringValue;
                }else if([contactElement.name isEqualToString:@"zi"]){
                    stu.zi = contactElement.stringValue;
                }else if ([contactElement.name isEqualToString:@"say"]){
                    stu.say = contactElement.stringValue;
                }else if ([contactElement.name isEqualToString:@"weapon"]){
                    stu.weapon = contactElement.stringValue;
                }
                 */
                
                //使用KVC对stu整个赋值  第二种赋值方法
                [stu setValue:contactElement.stringValue forKeyPath:contactElement.name];
            }
            //将赋值后的model类放入数据源数组
            [self.dataArray addObject:stu];
        }
        for (Student *stu in self.dataArray) {
            NSLog(@"%@",stu);
        }

    3、JSON-系统Foundation框架解析

        ①

    NSString *path = [[NSBundle mainBundle]pathForResource:@"JSON" ofType:@"txt"];//路径
        NSData *data = [NSData dataWithContentsOfFile:path];//数据对象
        /**
         *  放入数据对象源(NSData对象)
         *
         *  @param NSJSONReadingOptions NSJSONReadingMutableContainers 表示解析完成后返回值类型为NSMutableArray
                                        NSJSONReadingMutableLeaves 表示解析完成后返回值类型是NSMutableString
                                        NSJSONReadingAllowFragments 允许JSON串最外层既不是数组也不是字典,但必须是JSON有效片段
         *
         *  @return 数组
         */
        NSArray *array = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        self.dataArray = [NSMutableArray array];
        
        //遍历
        for (NSDictionary *dic in array) {
            //初始化model
            Student *stu = [Student new];
            [stu setValuesForKeysWithDictionary:dic];
            [self.dataArray addObject:stu];
        }
        for (Student *stu in self.dataArray) {
            NSLog(@"%@",stu);
        }

    4、JSON-第三方Kit包解析    

        Build Phases 中 Compile Sources找到第三方JSONKit.m文件,右侧添加-fno-objc-arc

    让其在ARC下运行

        ①引入第三方JSONKit包

        ②

    //1、获取路径
        NSString *path = [[NSBundle mainBundle]pathForResource:@"JSON" ofType:@"txt"];
        //2、创建data对象
        NSData *data = [NSData dataWithContentsOfFile:path];
        //3、获取数据
        NSArray *array = [data objectFromJSONData];
        self.dataArray = [NSMutableArray array];
        for (NSDictionary *dic in array) {
            Student *stu = [Student new];
            [stu setValuesForKeysWithDictionary:dic];
            [self.dataArray addObject:stu];
        }
        for (Student *stu in self.dataArray) {
            NSLog(@"%@",stu);
        }
  • 相关阅读:
    C# GridView点击某列打开新浏览器窗口
    大白话系列之C#委托与事件讲解(二)
    大白话系列之C#委托与事件讲解(一)
    Razor语法大全
    Expression<Func<T,TResult>>和Func<T,TResult>
    C#委托的介绍(delegate、Action、Func、predicate)
    Android--样式经验
    Android--onSaveInstanceState()保存数据
    Android--ActivityLiving生命周期
    android--快捷键
  • 原文地址:https://www.cnblogs.com/mingmenqiaochu/p/5668082.html
Copyright © 2011-2022 走看看