·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> app软件开发 >> IOS开发 >> GdataXML解析配置和简单使用

GdataXML解析配置和简单使用

作者:佚名      IOS开发编辑:admin      更新时间:2022-07-23

导入libxml2,使用第三方AFNetworking网络请求,第三方XML解析GData

GData需要的配置 Build Settings 里搜索,添加如下

如果是ARC ,需要加上 -fno-objc-arc

首先找一个xml网址使用AFNetworking请求得到NSData数据

#define HTTP_URL_GET @"http://lab.hudong.com/ipad/zutujingxuan.xml"
- (void)getRequest {
    AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]
                                              init];
    //返回数据解析
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    //AFJSONResponseSerializer responSEObject就是jeson解析后的对象(有可能是字典)
    //AFXMLParserResponseSerializer responseObject就是NSXMLPareser对象
    //AFHTTPRequestOperationManager responseObject就是NSData
    
    [manager GET:HTTP_URL_GET parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"%@",responseObject);
//        NSXMLParser
        [self xml:responseObject];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"error:%@.",error.localizedDescription);
    }];
    
}

先打开火狐浏览器看xml的层次结构(复制网址在火狐浏览器上打开)

使用GData解析,记住一层一层解析

- (void)xml:(NSData *)data {
      //创建一个解析对象
    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithData:data options:0 error:nil];
    //获取根节点
    GDataXMLElement *rootElement = document.rootElement;
    NSLog(@"name: %@,stringvaule: %@",rootElement.name,rootElement.stringValue);
    GDataXMLElement *channeName = [rootElement elementsForName:@"channelName"].firstObject;
    NSLog(@"%@---%@",channeName.name,channeName.stringValue);
    //取多组
    // //docInfo 直接跳过前面的子节点,知道取到名字对应的子节点
    //    NSArray *docInfos = [rootEiement nodesForXPath:@"//docInfo" error:nil]
    NSArray *docInfos = [[rootElement elementsForName:@"docList"].firstObject elementsForName:@"docInfo"];
    
    for (GDataXMLElement *docInfoElement in docInfos) {
        NSMutableDictionary * dic = [NSMutableDictionary dictionary];
        for (GDataXMLElement *elment in [docInfoElement children]) {
            [dic setObject:elment.stringValue forKey:elment.name];
        }
        [_allInfos addObject:dic];
    }
    NSLog(@"%@",_allInfos);
}

最后是用一个全局的NSMutableArray接收打印,~