【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;
}
最新文章
- 用vue.js学习es6(二):let和const使用
- angularJ之$filter过滤器
- git 和 github 关系?
- js正则表达式校验非负整数:^\d+$ 或 ^[1-9]\d*|0$ 【转载】
- 自己写的java用jxl导出到excel工具
- 故障模块名称: mso.dll
- [Entity Framework] MySQL @ Entity Framework 6
- 脚本语言:Xmas(二)
- 代码与编程(java基础)
- OutOfMemoryError 到底能不能被捕获?
- Properties类和如何操作属性
- 解决WinForm(C#)中MDI子窗体最大化跑偏的问题
- 团队作业之四则运算GUI展示
- Android的基本常用的短信操作
- SQL Server 数据库表的统计信息的更新
- Python 字符串前面加u,r,b,f的含义
- 分清clientY pageY screenY layerY offsetY的区别
- Python3练习:对员工信息文件,实现增删改查操作
- poj 3164(最小树形图模板)
- CF1072B Curiosity Has No Limits
热门文章
- jQuery Tools:Web开发必备的 jQuery UI 库
- rpmbuild构建包时的宏定义的赋值
- 去除VS2010中中文注释下的红色波浪线
- NandFlash
- 项目任务管理(TaskMgr)技术篇
- Kent Beck揭秘Facebook开发部署流程
- 转:C++中 #ifdef 和#endif的作用
- ASCII是指128个字符(不是256个)和ASCII Extended Characters(就是那些奇怪的外文字符)
- 学习Javascript闭包(Closure) by 阮一峰
- 【转】EditText大小(长宽)的多种设置方式----不错