【IOS】 XML解析和xml转plist文件(GDataXML)
iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用。(以下图为例)

1.对于一个xml文件,先读取出来
NSData *xmlData = [[NSFileManager defaultManager]contentsAtPath:[NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"test.xml"]];
NSError *error;
GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
2.取到要解析到的节点目录
NSString *path = @"/Users/user";
NSArray *arr = [document nodesForXPath:path error:nil];
NSArray *userArr = [subElement elementsForName:@"name"];
for (GDataXMLElement *subElement in userArr) {
NSString *name1 = [[subElement attributeForName:@"name1"]stringValue];
NSString *name2 = [[subElement attributeForName:@"name2"]stringValue];
}
至此可解析完毕。
3.下面实例展示如果将一份全球国家地区和编码的xml文件转为plist文件

NSData *plistXML = [[NSFileManager defaultManager]contentsAtPath:[NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"country_city_20151105.xml"]];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:plistXML options:0 error:&error];
NSMutableDictionary *dict = [[NSMutableDictionary alloc]init];
NSString *path = @"/Location";
NSArray *locationArr = [doc nodesForXPath:path error:nil];
NSLog(@"locationArr = %@",locationArr);
for (GDataXMLElement *obj in locationArr) {
NSMutableArray *countryA = [[NSMutableArray alloc]init];
NSMutableArray *countryB = [[NSMutableArray alloc]init];
NSMutableArray *countryC = [[NSMutableArray alloc]init];
NSMutableArray *countryD = [[NSMutableArray alloc]init];
NSMutableArray *countryE = [[NSMutableArray alloc]init];
NSMutableArray *countryF = [[NSMutableArray alloc]init];
NSMutableArray *countryG = [[NSMutableArray alloc]init];
NSMutableArray *countryH = [[NSMutableArray alloc]init];
NSMutableArray *countryI = [[NSMutableArray alloc]init];
NSMutableArray *countryJ = [[NSMutableArray alloc]init];
NSMutableArray *countryK = [[NSMutableArray alloc]init];
NSMutableArray *countryL = [[NSMutableArray alloc]init];
NSMutableArray *countryM = [[NSMutableArray alloc]init];
NSMutableArray *countryN = [[NSMutableArray alloc]init];
NSMutableArray *countryO = [[NSMutableArray alloc]init];
NSMutableArray *countryP = [[NSMutableArray alloc]init];
NSMutableArray *countryQ = [[NSMutableArray alloc]init];
NSMutableArray *countryR = [[NSMutableArray alloc]init];
NSMutableArray *countryS = [[NSMutableArray alloc]init];
NSMutableArray *countryT = [[NSMutableArray alloc]init];
NSMutableArray *countryU = [[NSMutableArray alloc]init];
NSMutableArray *countryV = [[NSMutableArray alloc]init];
NSMutableArray *countryW = [[NSMutableArray alloc]init];
NSMutableArray *countryX = [[NSMutableArray alloc]init];
NSMutableArray *countryY = [[NSMutableArray alloc]init];
NSMutableArray *countryZ = [[NSMutableArray alloc]init];
NSArray *countryArr = [obj elementsForName:@"CountryRegion"];
if (countryArr.count) {
for (GDataXMLElement *subElement in countryArr) {
NSString *NameString = [[subElement attributeForName:@"Name"]stringValue];
NSString *codeStr = [[subElement attributeForName:@"Code"]stringValue];
NSString *regionCodeStr = [[subElement attributeForName:@"regionCode"]stringValue];
NSLog(@"NameString = %@ codeStr = %@ regionCodeStr = %@",NameString,codeStr,regionCodeStr);
NSString *tmpStr = [NSString stringWithFormat:@"%@+%@",NameString,regionCodeStr];
if ([@"A" isEqualToString:[self firstLetterForString:NameString]]) {
[countryA addObject:tmpStr];
}else if ([@"B" isEqualToString:[self firstLetterForString:NameString]]) {
[countryB addObject:tmpStr];
}else if ([@"C" isEqualToString:[self firstLetterForString:NameString]]) {
[countryC addObject:tmpStr];
}else if ([@"D" isEqualToString:[self firstLetterForString:NameString]]) {
[countryD addObject:tmpStr];
}else if ([@"E" isEqualToString:[self firstLetterForString:NameString]]) {
[countryE addObject:tmpStr];
}else if ([@"F" isEqualToString:[self firstLetterForString:NameString]]) {
[countryF addObject:tmpStr];
}else if ([@"G" isEqualToString:[self firstLetterForString:NameString]]) {
[countryG addObject:tmpStr];
}else if ([@"H" isEqualToString:[self firstLetterForString:NameString]]) {
[countryH addObject:tmpStr];
}else if ([@"I" isEqualToString:[self firstLetterForString:NameString]]) {
[countryI addObject:tmpStr];
}else if ([@"J" isEqualToString:[self firstLetterForString:NameString]]) {
[countryJ addObject:tmpStr];
}else if ([@"K" isEqualToString:[self firstLetterForString:NameString]]) {
[countryK addObject:tmpStr];
}else if ([@"L" isEqualToString:[self firstLetterForString:NameString]]) {
[countryL addObject:tmpStr];
}else if ([@"M" isEqualToString:[self firstLetterForString:NameString]]) {
[countryM addObject:tmpStr];
}else if ([@"N" isEqualToString:[self firstLetterForString:NameString]]) {
[countryN addObject:tmpStr];
}else if ([@"O" isEqualToString:[self firstLetterForString:NameString]]) {
[countryO addObject:tmpStr];
}else if ([@"P" isEqualToString:[self firstLetterForString:NameString]]) {
[countryP addObject:tmpStr];
}else if ([@"Q" isEqualToString:[self firstLetterForString:NameString]]) {
[countryQ addObject:tmpStr];
}else if ([@"R" isEqualToString:[self firstLetterForString:NameString]]) {
[countryR addObject:tmpStr];
}else if ([@"S" isEqualToString:[self firstLetterForString:NameString]]) {
[countryS addObject:tmpStr];
}else if ([@"T" isEqualToString:[self firstLetterForString:NameString]]) {
[countryT addObject:tmpStr];
}else if ([@"U" isEqualToString:[self firstLetterForString:NameString]]) {
[countryU addObject:tmpStr];
}else if ([@"V" isEqualToString:[self firstLetterForString:NameString]]) {
[countryV addObject:tmpStr];
}else if ([@"W" isEqualToString:[self firstLetterForString:NameString]]) {
[countryW addObject:tmpStr];
}else if ([@"X" isEqualToString:[self firstLetterForString:NameString]]) {
[countryX addObject:tmpStr];
}else if ([@"Y" isEqualToString:[self firstLetterForString:NameString]]) {
[countryY addObject:tmpStr];
}else if ([@"Z" isEqualToString:[self firstLetterForString:NameString]]) {
[countryZ addObject:tmpStr];
}
}
}
[dict setObject:countryA forKey:@"A"];
[dict setObject:countryB forKey:@"B"];
[dict setObject:countryC forKey:@"C"];
[dict setObject:countryD forKey:@"D"];
[dict setObject:countryE forKey:@"E"];
[dict setObject:countryF forKey:@"F"];
[dict setObject:countryG forKey:@"G"];
[dict setObject:countryH forKey:@"H"];
[dict setObject:countryI forKey:@"I"];
[dict setObject:countryJ forKey:@"J"];
[dict setObject:countryK forKey:@"K"];
[dict setObject:countryL forKey:@"L"];
[dict setObject:countryM forKey:@"M"];
[dict setObject:countryN forKey:@"N"];
[dict setObject:countryO forKey:@"O"];
[dict setObject:countryP forKey:@"P"];
[dict setObject:countryQ forKey:@"Q"];
[dict setObject:countryR forKey:@"R"];
[dict setObject:countryS forKey:@"S"];
[dict setObject:countryT forKey:@"T"];
[dict setObject:countryU forKey:@"U"];
[dict setObject:countryV forKey:@"V"];
[dict setObject:countryW forKey:@"W"];
[dict setObject:countryX forKey:@"X"];
[dict setObject:countryY forKey:@"Y"];
[dict setObject:countryZ forKey:@"Z"];
NSArray *arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *plistPath = [[arr objectAtIndex:0] stringByAppendingPathComponent:@"country.plist"];
[dict writeToFile:plistPath atomically:YES];
}
#pragma mark - 取出名字首字母
-(NSString *)firstLetterForString:(NSString *)str{
ChineseString *chineseString = [[ChineseString alloc]init];
chineseString.string = [NSString stringWithString:str];
if (![chineseString.string isEqualToString:@""]) {
NSString *pinYinResult = [NSString string];
for (int i = 0; i < chineseString.string.length; i++) {
NSString *singlePinyinLetter = [[NSString stringWithFormat:@"%c",pinyinFirstLetter([chineseString.string characterAtIndex:i])]uppercaseString];
pinYinResult = [pinYinResult stringByAppendingString:singlePinyinLetter];
}
chineseString.pinyin = [pinYinResult substringToIndex:1];
}else{
chineseString.pinyin = @"#";
}
return chineseString.pinyin;
}
【IOS】 XML解析和xml转plist文件(GDataXML)的更多相关文章
- XML解析与xml和Map集合的互转
1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...
- iOS开发——数据持久化OC篇&plist文件增删改查操作
Plist文件增删查改 主要操作: 1.//获得plist路径 -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在 -(BOOL ...
- iOS -数据库网络之xml解析之远程解析XML
1.IOS中XML文件获取 //设置远程访问地址 NSURL *url=[NSURL URLWithString:@""]; //创建动态URL请求,并初 ...
- iOS -数据库网络之xml解析
XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax) 1.IOS中XML文件获取 首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: ...
- iOS 中的 xml 解析
在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios sdk中,同时支持DOM 和 SA ...
- SugarSync网盘之XML解析
iOS的XML解析 刚在应用里支持了SugarSync网盘.其实也是第一次听说这个网盘,不过在国外貌似还蛮有名,这些都不是重点,重点是借此来总结一下iOS的XML解析.Xml想必也不陌生了,但是在iO ...
- XML解析之DOM详解及与SAX解析方法的比较
XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...
- JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)
1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...
- QF——网络之JSON解析和XML解析
JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...
随机推荐
- 使用js判断一个对象是否为空 比如 obj={}
今天使用到js判断一个对象是否为空,js没有封装好的方法,这里最好的办法就是使用jquery里面的封装好的方法 $.isEmptyObject(obj)
- 长期支持版本(即不自动更新版本) - Flash Player 18.0.0.268
无意中发现,适合不喜欢折腾的朋友. 下载链接:(官方:http://www.adobe.com/cn/products/flashplayer/distribution3.html) (分流:http ...
- [cocoapods速成] cocoapods的基本用法和自制 podspec
1 安装方法 主要命令: sudo gem install cocoapods ------------------------------------------------------------ ...
- 转:PHP 5.4中的traits
原文来自于:http://www.cnblogs.com/thinksasa/archive/2013/05/16/3081247.html PHP 5.4中的traits,是新引入的特性,中文还真不 ...
- Apache Maven 入门篇(下)
第一篇文章大概的介绍了一下Apache Maven以及它的下载和安装,并且运行了一个简单的示例.那么在对maven有了一点接触后,接下去的一步是要了解maven的核心概念,这样才能在使用maven的时 ...
- java 对象序列化 RMI
对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中.JVM停止之后,这些状态就丢失了.在很多情况下,对象的内部状态是需要被持久化下来的.提到持久化,最直接的做法是保存到文件系统或是数 ...
- 5. repeater图片放大
当把鼠标放在一张小图片上时,图片会自动放大,离开时它变小. 我们在静态页面中可以用jQuery来操作.如下为html中的源码. <!DOCTYPE html PUBLIC "-//W3 ...
- AlgorithmsI PA2: Randomized Queues and Deques RandomizedQueue
RandomizedQueue 有几个关键点: 1. 选择合适的数据结构,因为需要任意位置删除元素,Linked list 做不到,必须使用resizing arrays. 2. resizing 的 ...
- COJ 0970 WZJ的数据结构(负三十)树分治
WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...
- Light OJ 1013 Love Calculator(DP)
题目大意: 给你两个字符串A,B 要求一个最短的字符串C,使得A,B同时为C的子串. 问C最短长度是多少? C有多少种? 题目分析: 做这道题目的时候自己并没有推出来,看了网上的题解. 1.dp[C串 ...