XML解析及GData库使用

2018-05-13  本文已影响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

有兴趣的可以自己尝试

数据连接

上一篇 下一篇

猜你喜欢

热点阅读