一、背景
前些日子,由于项目中需要接入其他平台的界面,其中在返回数据中是把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
3. 在
build settings
查找 Other Linker Flags
, 在 Other Linker Flags
添加上参数:-lxml2
添加参数.png
4. 在
build phase
展开 compile source
, 选择 GDataXMLNode.m
文件添加上 -fno-objc-arc
添加参数.png
四、解析XML
第一种解析方法
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.解析结果
第二种解析方法 --
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
网友评论