美文网首页
XML解析及GData库使用

XML解析及GData库使用

作者: 可惜你不是我的双子座 | 来源:发表于2018-05-13 23:39 被阅读16次

    一、背景

    前些日子,由于项目中需要接入其他平台的界面,其中在返回数据中是把json数据包裹在xml中,这时需要我们先解析xml才能看到json格式数据,因此记录一下xml的解析方式。

    二、XML与JSON的优缺点

    1.XML

    优点:可读性强,扩展性强。
    缺点:冗余的数据多,传输比较慢。

    2.JSON

    优点:轻巧,传输速率高,冗余的数据少。
    缺点:可读性差些。

    三、GData使用注意

    解析xml经常使用库:GData。使用之前,需要注意几点。
    1. 添加GData库;
    2.build settings 查找 Header Search Paths , 在 Header Search Paths 添加上路径:/usr/include/libxml2

    添加路径.png
    3.build settings 查找 Other Linker Flags , 在 Other Linker Flags 添加上参数:-lxml2
    添加参数.png
    4.build phase 展开 compile source, 选择 GDataXMLNode.m 文件添加上 -fno-objc-arc
    添加参数.png

    四、解析XML

    第一种解析方法

    解析数据.png
    1.加载数据到GDataXMLDocument对象中
    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data encoding:0 error:nil];
    

    2.获取根节点

    GDataXMLElement *root = doc.rootElement;
    

    3.数组包含了两个叫User的节点

    NSArray *arrUser = [root elementsForName:@"User"];
    

    4.遍历所有值

    for (GDataXMLElement *element in arrUser) {
                
                NSArray *arrName = [element elementsForName:@"name"];
                //只有一个name节点,所有第0个元素就是要找的节点
                GDataXMLElement *name = arrName[0];
                
                NSArray *firstName = [name elementsForName:@"firstName"];
                GDataXMLElement *first = firstName[0];
                
                NSArray *lastName = [name elementsForName:@"lastName"];
                GDataXMLElement *last = lastName[0];
                
                //获取name的节点值;
                NSString *namet = [NSString stringWithFormat:@"%@%@",first.stringValue,last.stringValue];
                
                NSArray *arrAge = [element elementsForName:@"age"];
                GDataXMLElement *age = arrAge[0];
                NSString *ageStr = age.stringValue;
                
                //获取属性值:GDataXMLNode
                //id 是属于name的属性;获取属性值要通过name;
                GDataXMLNode *idNode = [name attributeForName:@"id"];
                NSString *idStr = idNode.stringValue;
                
                NSLog(@"id=%@,name=%@,age=%@",idStr,namet,ageStr);
            }
    

    5.解析结果

    解析结果.png
    第二种解析方法 -- Xpath路径语法
    解析数据.png
    1.加载数据到GDataXMLDocument对象中
    GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:data encoding:0 error:nil];
    

    2.根据路径找到解析数组

    NSArray *arrList = [doc nodesForXPath:@"/root/category/list/list/list" error:nil];
    

    3.遍历所有值

    for (GDataXMLElement *element in arrList) {
                
                GDataXMLNode *dname = [element attributeForName:@"dname"];
                NSLog(@"%@",dname.stringValue);
            }
    

    4.解析结果


    解析结果.png

    有兴趣的可以自己尝试

    数据连接

    相关文章

      网友评论

          本文标题:XML解析及GData库使用

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