您的位置:68399皇家赌场 > 域名注册 > iOS开辟中常用第三方库的利用和布署-GDataXML,i

iOS开辟中常用第三方库的利用和布署-GDataXML,i

发布时间:2019-08-17 15:38编辑:域名注册浏览(165)

    XML剖析与创制(GDataXML),xmlgdataxml

     一、XML解析

      对于JSON分析,iOS5事先有非常多的开源三方类(如JSONKit等)协理,一行代码消除;iOS5后JSON能够用原生API剖判,不仅唯有益何况飞快。可是XML剖判原生的API不是很要好,深入分析也麻烦;幸而能够用谷歌(Google)的GDataXML来剖析,怎么集成GDataXML到工程请查看本身从前的小说,用GDataXML稍稍好深入分析一点,XML的解析原理能够驾驭成:脱衣格局,想要洗澡就要把服装从外到里依次脱掉,然后每件衣裳都得以用作是贰个GDataElement,每贰个GDataElement都有和好的值与质量,上边来分析以下XML数据。

    XML文件数量(文件名位Attribute.xml):

    <list>
        <OrderData HASH="1408108039">od0</OrderData>
        <OrderData HASH="208524692">
            <id>97</id>
            <customer>
                <CustomerData HASH="2128670187">cd</CustomerData>
            </customer>
            <billingAddress>ba</billingAddress>
            <deliveryAddress>da</deliveryAddress>
            <orderDetail>
                <list>
                    <OrderDetailData HASH="516790072">odd10</OrderDetailData>
                    <OrderDetailData HASH="11226247">odd11</OrderDetailData>
                    <OrderDetailData HASH="11226247">odd12</OrderDetailData>
                </list>
            </orderDetail>
            <log>l</log>
        </OrderData>
        <OrderData HASH="1502226778">odd20</OrderData>
    </list>
    

     

    OC深入分析代码(全部element的值与质量用log来打字与印刷):

    NSError *error = nil;
        NSString *filePath0 = [[NSBundle mainBundle] pathForResource:@"Attribute" ofType:@"xml"];// 获取工程内Attribute.xml文件
        NSData *xmldata0 = [[NSData alloc] initWithContentsOfFile:filePath0];
        GDataXMLDocument *doc0 = [[GDataXMLDocument alloc] initWithData:xmldata0 options:0 error:&error];
        GDataXMLElement *rootElement = doc0.rootElement;//获取跟节点
        NSLog(@"%@", rootElement);
        NSArray *messages = [rootElement elementsForName:@"OrderData"];
        if (messages.count > 0) {
            for (GDataXMLElement *element in messages) {
                //取OrderData的HASH属性值
                NSLog(@"attrute:%@", [[element attributeForName:@"HASH"] stringValue]);
                //取OrderData的HASH属性值,如果没有值,取出来的则是所有子值的组合(这里是:97cdbadaodd10odd11odd12l)
                NSLog(@"OrderData:%@", [element stringValue]);
                //获取id子元素数组
                NSArray *elementIDs = [element elementsForName:@"id"];
                if (elementIDs.count > 0) {
                    for (GDataXMLElement *eID in elementIDs) {
                        NSLog(@"id:%d", [[eID stringValue] intValue]);  // 获取ID的值
                    }
                }
    
                //获取customer子元素数组
                NSArray *elementCustomers = [element elementsForName:@"customer"];
                if (elementCustomers.count > 0) {
                    for (GDataXMLElement *eID in elementCustomers) {
                        NSArray *customerDatas = [eID elementsForName:@"CustomerData"];
                        if (customerDatas.count > 0) {
                            for (GDataXMLElement *customerData in customerDatas) {
                                NSLog(@"customerData:%@", [customerData stringValue]);  // 获取customerData的值
                                NSLog(@"customerData-attrute:%@", [[customerData attributeForName:@"HASH"] stringValue]);  // 获取customerData的HASH属性值
                            }
                        }
                    }
                }
    
                //获取billingAddress子元素数组
                NSArray *elementBillingAddresses = [element elementsForName:@"billingAddress"];
                if (elementBillingAddresses.count > 0) {
                    for (GDataXMLElement *eID in elementBillingAddresses) {
                        NSLog(@"billingAddress:%@", [eID stringValue]);  // 获取billingAddress的值
                    }
                }
    
                //获取deliveryAddress子元素数组
                NSArray *elementDeliveryAddressses = [element elementsForName:@"deliveryAddress"];
                if (elementDeliveryAddressses.count > 0) {
                    for (GDataXMLElement *eID in elementDeliveryAddressses) {
                        NSLog(@"deliveryAddress:%@", [eID stringValue]);// 获取deliveryAddress的值
                    }
                }
    
                //获取orderDetail子元素数组
                NSArray *elementOrderDetails = [element elementsForName:@"orderDetail"];
                if (elementOrderDetails.count > 0) {
                    for (GDataXMLElement *eID in elementOrderDetails) {
                        NSArray *lists = [eID elementsForName:@"list"];
                        if (lists.count > 0) {
                            for (GDataXMLElement *list in lists) {
                                NSArray *OrderDetailDatas = [list elementsForName:@"OrderDetailData"];
                                if (OrderDetailDatas.count > 0) {
                                    for (GDataXMLElement *OrderDetailData in OrderDetailDatas) {
                                        NSLog(@"OrderDetailData-attribute:%@", [[OrderDetailData attributeForName:@"HASH"] stringValue]);
                                        NSLog(@"OrderDetailData:%@", [OrderDetailData stringValue]);
                                    }
                                }
                            }
                        }
                    }
                }
    
                //获取log子元素数组
                NSArray *elementLogs = [element elementsForName:@"log"];
                if (elementLogs.count > 0) {
                    for (GDataXMLElement *eID in elementLogs) {
                        NSLog(@"log:%@", [eID stringValue]);// 获取log的值
                    }
                }
            }
        }
    

     

    那般一层一层的深入分析是否很明白,老妈在也不用忧郁本人解不了复杂的XML了。在那边享受三个小技巧,获取节点的时候不要那样获取节点:GDataXMLElement *rootElement = doc.rootElement;

    能够因而路线直接拿走相应的节点:NSArray *nodes = [doc nodesForXPath:@"//Party/Player" error:&error];,那样做得实惠是在多少个比较复杂的XML文件中并非一层一层的遍历,直接取到直接想要的那层。

     

    二、XML创建

    XML创造与深入分析是多少个逆进程,能够清楚为:穿衣情势,冬季起来,创服装的逐个依次是穿里衣,外套,文胸等。成立XML文件也是同一,先制造增添最里层成分(GDataXMLElement),那么上边我们来创建有以下数据的xml文件

    <Party xmlns:name space="http://www.baidu.com" xmlns="http://www.google.com/hk" attribute="party's attribute">
      <Player>
        <Name>Butch</Name>
        <Level>1</Level>
        <Class>Fighter</Class>
      </Player>
      <Player>
        <Name>Shadow</Name>
        <Level>2</Level>
        <Class>Rogue</Class>
      </Player>
      <Player>
        <Name>Crak</Name>
        <Level>3</Level>
        <Class>Wizard</Class>
      </Player>
    </Party>
    

     

    为了在简化创立的代码与逻辑,大家先创建Player与Party七个OC类

    //  Player.h文件
    #import <Foundation/Foundation.h>
    typedef enum {
        RPGClassFighter = 0,
        RPGClassRogue,
        RPGClassWizard
    } RPGClass;
    
    @interface Player : NSObject
    @property (copy, nonatomic) NSString *name;
    @property int level;
    @property RPGClass rpgClass;
    - (id)initWithName:(NSString *)aName level:(int)aLevel rpgClass:(RPGClass)aRPGClass;
    @end
    
    //  Player.m文件
    #import "Player.h" 
    @implementation Player
    - (id)initWithName:(NSString *)aName level:(int)aLevel rpgClass:(RPGClass)aRPGClass {
        if (self = [super init]) {
            _name = aName;
            _level = aLevel;
            _rpgClass = aRPGClass;
        }
        return self;
    }
    @end
    
    //  Party.h文件
    #import <Foundation/Foundation.h>
    @interface Party : NSObject
    @property (strong, nonatomic) NSMutableArray *players;
    @end
    
    //  Party.m
    #import "Party.h"
    #import "Player.h"
    @implementation Party
    - (instancetype)init
    {
        self = [super init];
        if (self) {
            _players = [[NSMutableArray alloc] init];
        }
        return self;
    }
    @end
    

     

    始建XML方法(创设多个Player这里未有提交,请读者直接写一下哈)

      (void)saveParty:(Party *)aParty {
        GDataXMLElement *partyElement = [GDataXMLElement elementWithName:@"Party"];
        //添加属性
        [partyElement addAttribute:[GDataXMLNode elementWithName:@"attribute" stringValue:@"party's attribute"]];
        //添加命名空间
        [partyElement addNamespace:[GDataXMLNode namespaceWithName:@"name space" stringValue:@"http://www.baidu.com"]];
        //添加缺省命名空间
        [partyElement addNamespace:[GDataXMLNode namespaceWithName:@"" stringValue:@"http://www.google.com/hk"]];
        for (Player *player in aParty.players) {
            GDataXMLElement *playerElement = [GDataXMLNode elementWithName:@"Player"];   // 创建元素
            GDataXMLElement *nameElement = [GDataXMLNode elementWithName:@"Name" stringValue:player.name];
            GDataXMLElement *levelElement = [GDataXMLNode elementWithName:@"Level" stringValue:[NSString stringWithFormat:@"%d", player.level]];
            NSString *rpgClass = nil;
            if (player.rpgClass == RPGClassFighter) {
                rpgClass = @"Fighter";
            } else if (player.rpgClass == RPGClassRogue) {
                rpgClass = @"Rogue";
            }else if (player.rpgClass == RPGClassWizard) {
                rpgClass = @"Wizard";
            }
            GDataXMLElement *rpgClassElement = [GDataXMLNode elementWithName:@"Class" stringValue:rpgClass];
            [playerElement addChild:nameElement];       // 给player添加name元素
            [playerElement addChild:levelElement];      // 给player添加level元素
            [playerElement addChild:rpgClassElement];   // 给player添加rpgClass元素
            [partyElement addChild:playerElement];      // 给party添加player元素
        }
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:partyElement];
        NSData *xmlData = [doc XMLData];
        NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"makeXMLFile.xml"];
        [xmlData writeToFile:filePath atomically:YES];
    }
    

     

    看完代码是否以为XML创设也易于吧(如有不成立地点请指正,谢谢!)

    一、XML解析对于JSON分析,iOS5事先有比比较多的开源三方类(如JSONKit等)援救,一行代码化解;iOS5后JS...

      (void)saveParty:(Party *)aParty {
        GDataXMLElement *partyElement = [GDataXMLElement elementWithName:@"Party"];
        //添加属性
        [partyElement addAttribute:[GDataXMLNode elementWithName:@"attribute" stringValue:@"party's attribute"]];
        //添加命名空间
        [partyElement addNamespace:[GDataXMLNode namespaceWithName:@"name space" stringValue:@"http://www.baidu.com"]];
        //添加缺省命名空间
        [partyElement addNamespace:[GDataXMLNode namespaceWithName:@"" stringValue:@"http://www.google.com/hk"]];
        for (Player *player in aParty.players) {
            GDataXMLElement *playerElement = [GDataXMLNode elementWithName:@"Player"];   // 创建元素
            GDataXMLElement *nameElement = [GDataXMLNode elementWithName:@"Name" stringValue:player.name];
            GDataXMLElement *levelElement = [GDataXMLNode elementWithName:@"Level" stringValue:[NSString stringWithFormat:@"%d", player.level]];
            NSString *rpgClass = nil;
            if (player.rpgClass == RPGClassFighter) {
                rpgClass = @"Fighter";
            } else if (player.rpgClass == RPGClassRogue) {
                rpgClass = @"Rogue";
            }else if (player.rpgClass == RPGClassWizard) {
                rpgClass = @"Wizard";
            }
            GDataXMLElement *rpgClassElement = [GDataXMLNode elementWithName:@"Class" stringValue:rpgClass];
            [playerElement addChild:nameElement];       // 给player添加name元素
            [playerElement addChild:levelElement];      // 给player添加level元素
            [playerElement addChild:rpgClassElement];   // 给player添加rpgClass元素
            [partyElement addChild:playerElement];      // 给party添加player元素
        }
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithRootElement:partyElement];
        NSData *xmlData = [doc XMLData];
        NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"makeXMLFile.xml"];
        [xmlData writeToFile:filePath atomically:YES];
    }
    

    3.1 文书档案格式

    贰个完全的XML文书档案包涵:文书档案注解 成分 属性#######文书档案评释<?xml version="1.0" encoding="UTF-8" ?>#######元素

    • 三个言语包括了起来标签 甘休标签
    • 要素未有内容也可以
    • 要素可以嵌套,但不能够时有时无嵌套
    • 抱有的空格和换行都当做内容处理

    iOS开拓中常用第三方库的行使和陈设-GDataXML,ios-gdataxml

    那篇文章意在给本人之后要求时能立时的查到,省得每一遍都去baidu. 

    1. xml解析库-GDataXML 
      参照小说: 
      GDataXML下载地址: 
      (1)GDataXML.h/m文件 
       
      (2)DGataDefines.h GDataTargetNamespace.h 文件 
       

    布置进度: 
    (1).引入GDataXML(4个文件) 
    <arc模式下>.对GDataXML.m增加非arc注释 -fno-objc-arc 
    (2).增添系统库 libxml2.dylib 
    (3).Head Search Path中添加 /usr/include/libxml2 
    (4).Other linker flags中添加 -lxml2 
    (5).xml格式 
    ================================== 
    <?xml version="1.0" encoding="utf-8"?>  
    <Users>  
        <User id="001">  
            <name>Ryan</name>  
            <age>24</age>  
        </User>  
        <User id="002">  
            <name>Tang</name>  
            <age>23</age>  
        </User>  
    </Users> 
    ================================== 
    (6).应用 
    ================================== 
    //获取工程目录的xml文件  
        NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];  
        NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath];  
          
        //使用NSData对象开端化  
        GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData  options:0 error:nil];  
          
        //获取根节点(Users)  
        GDataXMLElement *rootElement = [doc rootElement];  
          
        //获取根节点下的节点(User)  
        NSArray *users = [rootElement elementsForName:@"User"];  
          
        for (GDataXMLElement *user in users) {  
            //User节点的id属性  
            NSString *userId = [[user attributeForName:@"id"] stringValue];  
            NSLog(@"User id is:%@",userId);  
              
            //获取name节点的值  
            GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0];  
            NSString *name = [nameElement stringValue];  
            NSLog(@"User name is:%@",name);  
              
            //获取age节点的值  
            GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0];  
            NSString *age = [ageElement stringValue];  
            NSLog(@"User age is:%@",age);  
            NSLog(@"-------------------");  
        } 

     一、XML解析

    2.1 JSON转成OC对象

    方法

    • 重回值:OC对象,JSON格式的最外层数据结构对象的OC对象

    • data : 二进制的JSON数据

    • options:选项,任选二个即可。

    • error:错误音信

       //类方法  JSONObjectWithData:data options:(NSJSONReadingOptions)opt error:(NSError **)error;
      

    eg: {"success":"用户名密码准确,成功登录"}

    //①序列化json对象NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];//②根据字典的属性,获取相应的内容NSString *str = dict[@"success"];
    

    ios零基础学习能够?应届结业生适合学习ios开辟?

    1. 付出碰着必供给有的,你可以接纳买一台MAC,或Computer中安装虚构机。
    2. 开荒语言是Obj-C. 先精通通晓 (5天)
    3. 合德语档大致的看三遍吧,首假使明白系统架构,控件使用(10天)
      View Programming Guide for iOS
      View Controller Programming Guide for iOS
      Table View Programming Guide for iOS
      Scroll View Programming Guide for iOS
    4. 协调给本身贰个急需,做三个回顾的app, 或找一些开源的app 看看(5天)
    5. 假设是IOS中常用的第三方的类库,要询问。
      Network, Cache, CoreDate

    developer.apple.com/...x.html  

    那篇小说意在给自个儿事后要求时能立时的查到,省得每便都去baidu. 1. xml解析库-GDa...

      对于JSON深入分析,iOS5事先有非常多的开源三方类(如JSON基特等)协理,一行代码消除;iOS5后JSON可以用原生API深入分析,不仅仅造福何况一点也不慢。然则XML剖析原生的API不是很和气,剖判也麻烦;幸亏能够用谷歌的GDataXML来解析,怎么集成GDataXML到工程请查看本身以前的随笔,用GDataXML稍稍好深入分析一点,XML的剖判原理能够领略成:脱衣形式,想要洗澡将要把服装从外到里依次脱掉,然后每件衣裳都足以当做是一个GDataElement,每八个GDataElement都有谈得来的值与品质,上边来分析以下XML数据。

    在iOS开辟中,常见的多少传输格式有三种:JSON和XML。近日JSON由于其体量小、传输速度快等优点,慢慢成为了主流的数量传输格式。

    ios解析kissxml 怎获得节点之间的文件

    IOS中有关XML的辨析有那多少个办法,之前在利用GDataXML剖判XML文书档案一文中验证了什么运用Google提供的XML解析类来深入分析XML文件,后天选用另二个开源项目KissXML来分析XML文件,引进开源项目及布局项指标主意和事先那篇作品中大同小异,到KissXML源码下载源码并服从从前文章中提到的章程布署好就可以。
    布局完结后,在AppDelegate.m(笔者建的是二个Empty工程)中引进如上面文件,编写翻译通过就认证引进项目和配置成功了,马上就能够起来运用了。

    [cpp] view plaincopy
    #import "DDXML.h"
    #import "DDXMLElementAdditions.h"

    KissXML帮助XPath,使用XPath特别有利,有关XPath的辨证可以参见那篇文章:XPath教程,大家这里也运用X帕特h来解析。

    AppDelegate.m中方法:

    [cpp] view plaincopy

    • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
      self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
      // Override point for customization after application launch.
      self.window.backgroundColor = [UIColor whiteColor];
      [self.window makeKeyAndVisible];

    //从工程目录获取XML文件
    NSString *path = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
    //获取NSData对象并伊始剖判
    NSData *xmlData = [NSData dataWithContentsOfFile:path];
    [self parseXML:xmlData];

    return YES;
    }

    解析XML的方法:

    [cpp] view plaincopy
    -(void)parseXML:(NSData *) data
    {
    //文书档案开首(KissXML和GDataXML同样也是依赖DOM的分析方法)
    DDXMLDocument *xmlDoc = [[DDXMLDocument alloc] initWithData:data options:0 error:nil];

    //利用XPath来定位节点(XPath是XML语言中的定位语法,类似于数据库中的SQL功效)
    NSArray *users = [xmlDoc nodesForXPath:@"//User" error:nil];
    for (DDXMLEl......余下全文>>  

    始建XML方法(创立多个Player这里未有付诸,请读者直接写一下哈)

    JSON数据格式 OC对象
    {...} NSDictionary
    [...] NSArray
    12 NSNumber

    二、XML创建

    3.3 GDataXML

     

    下边包车型大巴表格是JSON的多少格式与OC对象之间的抵触统一表,能够并行调换。

    本文由68399皇家赌场发布于域名注册,转载请注明出处:iOS开辟中常用第三方库的利用和布署-GDataXML,i

    关键词: xml 数据 ios GDataXML 解析

上一篇:玩转系统 Windows系统补丁知多少

下一篇:没有了