• XML网络数据解析


    1.首先加载xml网址

    -(void)loadXml
    {
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://m.kiway.cn:50/version/ddpt.xml"]];
        NSURLRequest *request1 = [NSURLRequest requestWithURL:url];
        
        NSURLResponse *response = nil;
        NSError *errpr = nil;
        //同步加载数据
        NSData *data1 = [NSURLConnection sendSynchronousRequest:request1 returningResponse:&response error:&errpr];
        NSXMLParser *xmlparser = [[NSXMLParser alloc] initWithData:data1];
        [xmlparser setDelegate:self];//设置代理方法
        BOOL flag = [xmlparser parse];//开始解析数据,做一个判断,成功在开始解析
        
        if (flag) {
            NSLog(@"OK");
        }else
        {
            NSLog(@"获取xml文件失败");
        }
        
    }

    2.xml数据解析的协议方法

    - (void)parserDidStartDocument:(NSXMLParser *)parser {
        parserObjects = [[NSMutableArray alloc] init];  //每一组信息都用数组来存,最后得到的数据即在此数组中
    }
    
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
        
        NSArray *elementArray = [[NSArray alloc] initWithObjects:@"serverCode",@"apkUrl",nil];
        
        if ([elementName isEqualToString:@"version"]) {  //开始解析News节点
            
            dataDict = [[NSMutableDictionary alloc] initWithCapacity:0];  //每一条信息都用字典来存储
            NSLog(@"%@",dataDict);
        }else {   //开始解析子节点
            for (NSString *e in elementArray) {
                if ([e isEqualToString:elementName]) {
                    self.m_strCurrentElement = elementName;
                    self.tempString = [NSMutableString string];
                    break;
                }
            }
        }
        
        
    }
    
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
        //填充string
        if (m_strCurrentElement) {
            [self.tempString appendString:string];
            [dataDict setObject:string forKey:m_strCurrentElement];
            
        }
    }
    
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
        
        //填充dic
        if (m_strCurrentElement) {
            [dataDict setObject:self.tempString forKey:m_strCurrentElement];
            
            self.m_strCurrentElement = nil;
            self.tempString = nil;
        }
        
        //结束解析News节点
        if ([elementName isEqualToString:@"version"]) {
            if (dataDict) {
                [parserObjects addObject:dataDict];
            }
        }
        
    }
    
    - (void)parserDidEndDocument:(NSXMLParser *)parser {
        
        
    
    }
  • 相关阅读:
    对position的认知观
    对于布局的见解
    Java中的多态
    继承中类型的转换
    继承中方法的覆盖
    继承条件下的构造方法调用
    Java函数的联级调用
    关于java中String的用法
    凯撒密码
    检查java 中有多少个构造函数
  • 原文地址:https://www.cnblogs.com/IOS-FU/p/4070435.html
Copyright © 2020-2023  润新知