ios & XML


#import "RegisterDevice.h"

@interface RegisterDevice ()<NSXMLParserDelegate>
//解析出的数据内部是字典类型
@property(strong, nonatomic) NSMutableArray *listData;
//当前标签的名字
@property(strong, nonatomic) NSString *currentTagName;


@end

@implementation RegisterDevice

+ (NSDictionary *)registerDeviceWithLocalInfo:(NSDictionary *)localInfoDic{
    NSMutableDictionary *mutDic = [[NSMutableDictionary alloc] init];
    
    NSString *strURL = @"";
    //把字符串转换为URL字符串
    [strURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    
    NSURL *url = [NSURL URLWithString:strURL];
    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];
    
    NSURLSession *session = [NSURLSession sharedSession];
    
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData *  data, NSURLResponse *  response, NSError *  error) {
        if (!error) {
//                NSString *aString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                //解析
                [[[self alloc] init] start:data];
        }else{
            NSLog(@"error: %@", error.localizedDescription);
        }
    }];
    [task resume];

    
    return [NSDictionary dictionaryWithDictionary:mutDic];
}

- (void)start:(NSData *)data{
    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];
    parser.delegate = self;
    [parser parse];
}
//文档开始的时候触发
- (void)parserDidStartDocument:(NSXMLParser *)parser {
    self.listData = [[NSMutableArray alloc] init];
}

//文档出错的时候触发
- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    NSLog(@"%@", parseError);
}

//遇到一个开始标签时候触发
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict {
    
    self.currentTagName = elementName;
    if ([self.currentTagName isEqualToString:@"Table1"]) {
        [self.listData addObject:attributeDict];
    }
    
}

//遇到字符串时候触发
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    //替换回车符和空格
    string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    if ([string isEqualToString:@""]) {
        return;
    }

}

//遇到结束标签时候出发
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    self.currentTagName = nil;
}

//遇到文档结束时候触发
- (void)parserDidEndDocument:(NSXMLParser *)parser {
    
    NSLog(@"NSXML解析完成...");
    
//    self.data.text = [NSString stringWithFormat:@"%@\nNSXML解析完成...", self.data.text];
//    
//    for (NSDictionary *dic in self.listData) {
//        self.data.text = [NSString stringWithFormat:@"%@\n num: %@\t name: %@",self.data.text, [dic objectForKey:@"num"],   [dic objectForKey:@"name"]];
//    }
    
}


@end



最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • XML 解析:
    亦晴工作室阅读 252评论 0 0
  • 读写XML文档,目前流行的两种模式:SAX和DOM。 1.SAX是一种基于事件驱动的解析模式。解析XML的时候,程...
    XLsn0w阅读 2,199评论 0 1
  • XML文件解析实例(NSXMLParser) 还是上一个Demo的要求,只是将解析方式由JSON变成XML,那又该...
    奕十八阅读 953评论 2 6
  • XML分为两种解析方式 第一种是 逐行解析方式 -- 使用系统解析器NSXMLParser 如下代码 需要签订协议...
    J_HX阅读 772评论 0 1
  • 引子 数据解析在iOS开发中是不可或缺的一环,从服务器获取到的数据,就目前来说无非就是XML和json两种。今天我...
    dalianer阅读 905评论 0 5