美文网首页我爱编程
DOM解析XMl文档

DOM解析XMl文档

作者: 您079 | 来源:发表于2018-01-18 10:01 被阅读0次

    一、编写 xml 文件


    XML文件

    将写好的XML文档 放入到 桌面 --> 【Documents的替身】中
    在网络上验证XML文档是否书写正确:网址:http://127.0.0.1/文档名

    二、创建继承于 NSObject 的类,例:类名为 Luck
    在Luck.h 文件中定义属性【属性名与XML文件中的属性名相同】
    @property (nonatomic ,strong) NSString *name, *like;

    三、在 ViewController.h 中创建表格
    签表格协议

    <UITableViewDelegate , UITableViewDataSource>
    
    // 定义成员变量 -- 表格/可变字典
    {
        NSMutableDictionary *_dic;
        
        UITableView *_table;
    }
    
    // 初始化表格
    _table = [[UITableView alloc] initWithFrame:[UIScreen mainScreen].bounds style:UITableViewStyleGrouped];
    _table.delegate = self;
    _table.dataSource = self;
    [self.view addSubview:_table];
    
    // 定义宏 -- XML文件的链接
    #define TEST_URL @"http://127.0.0.1/XML文档名"
    
    // DOM解析 -- 导入第三方文档
    // 创建连接对象
    NSURL *url = [NSURL URLWithString:TEST_URL];
        
    // 初始化 session
    NSURLSession *session = [NSURLSession sharedSession];
        
    // 请求过程
    NSURLSessionDataTask *task = [session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            
        // 使用 DOM 解析
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
            
        // 获取根标签的内容
        GDataXMLElement *rootEle = [doc rootElement];
            
        // 初始化字典
        _dic = [[NSMutableDictionary alloc] init];
            
        // 遍历
        for (GDataXMLElement *luckEle in [rootEle elementsForName:@"luck"]) {
                
            // 创建字符串 获取字典的key
            NSString *key = [[luckEle attributeForName:@"kind"] stringValue];
                
            // 创建数组
            NSMutableArray *myArr = [[NSMutableArray alloc] init];
                
            // 遍历 root 标签中的 luck 标签
            for (GDataXMLElement *heroEle in [luckEle elementsForName:@"people"]) {
                    
                // 实始化对象
                Luck *myLuck = [[Luck alloc] init];
                    
                // 创建数组 获取 luck 标签下的 name 标签
                NSArray *nameArr = [heroEle elementsForName:@"name"];
                    
                // 获取数组中唯一的值
                GDataXMLElement *nameEle = [nameArr firstObject];
                    
                // 获取标签中的内容
                myLuck.name = [nameEle stringValue];
                    
                // 获取 like 标签内容
                myLuck.like = [[[heroEle elementsForName:@"like"] firstObject] stringValue];
                // 添加到数组
                [myArr addObject:myLuck];
            }
                
            // 设置字典
            [_dic setObject:myArr forKey:key];
        }
            
        // 返回主线程 刷新表格
        dispatch_async(dispatch_get_main_queue(), ^{
                
           // 刷新表格
            [_table reloadData];
        });
            
    }];
        
    // 开始请求
    [task resume];
    

    设置表格分区数

    -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return _dic.count;
    }
    

    设置表格行数

    -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        NSString *key = [_dic.allKeys objectAtIndex:section];
        
        return [[_dic objectForKey:key] count];
    }
    

    设置cell内容

    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *reuseID = @"cell";
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseID];
        if (!cell) {
            
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseID];
        }
        
        NSString *key = [_dic.allKeys objectAtIndex:indexPath.section];
        cell.textLabel.text = [[[_dic objectForKey:key] objectAtIndex:indexPath.row] name];
        cell.detailTextLabel.text = [[[_dic objectForKey:key] objectAtIndex:indexPath.row] like];
        
        return cell;
    }
    
    // 页眉 -- 分区名
    -(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
    {
        return [_dic.allKeys objectAtIndex:section];
    }
    

    相关文章

      网友评论

        本文标题:DOM解析XMl文档

        本文链接:https://www.haomeiwen.com/subject/ckpioxtx.html