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