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];

//获取元素GDataXMLElement
GDataXMLElement *subElement = [arr lastObject];
 
//获取此节点下的name(如果此节点下是单一string可以这样)
NSString *name = [[[subElement elementsForName:@"name"]lastObject] stringValue];
 
//如果节点下是几个元素的,例如<name name1 = "aa" name2 = "aaa"/>
 
则应该

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)的更多相关文章

  1. XML解析与xml和Map集合的互转

    1.XML的解析.首先解析XML文件我们需要先获取到文件的存放路径,获取方法有三种分别获取xml文件不同的存放路径. 代码: public class PropertiesDemo { public ...

  2. iOS开发——数据持久化OC篇&plist文件增删改查操作

    Plist文件增删查改   主要操作: 1.//获得plist路径    -(NSString*)getPlistPath: 2.//判断沙盒中名为plistname的文件是否存在    -(BOOL ...

  3. iOS -数据库网络之xml解析之远程解析XML

    1.IOS中XML文件获取    //设置远程访问地址     NSURL *url=[NSURL URLWithString:@""];       //创建动态URL请求,并初 ...

  4. iOS -数据库网络之xml解析

    XML文件有2种解析方式 1.基于文档(document) 2.基于事件(sax)   1.IOS中XML文件获取   首先要将XML导入工程中 在ViewController的按钮事件中,代码如下: ...

  5. iOS 中的 xml 解析

    在ios 中解析xml 的方法有很多种 1.苹果原生 NSXMLParser:SAX方式解析,使用简单 2.第三方框架 libxml2:纯c语言,默认包含在ios  sdk中,同时支持DOM 和 SA ...

  6. SugarSync网盘之XML解析

    iOS的XML解析 刚在应用里支持了SugarSync网盘.其实也是第一次听说这个网盘,不过在国外貌似还蛮有名,这些都不是重点,重点是借此来总结一下iOS的XML解析.Xml想必也不陌生了,但是在iO ...

  7. XML解析之DOM详解及与SAX解析方法的比较

    XML解析(DOM) XML文件解析方法介绍 我们所用到的NSXMLParser是采用SAX方法解析 SAX(Simple API for XML) 只能读,不能修改,只能顺序访问,适合解析大型XML ...

  8. JAVA基础学习之XMLCDATA区、XML处理指令、XML约束概述、JavaBean、XML解析(8)

    1.CDATA区在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是当作原始内容处理.遇到此种情况,可以把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直 ...

  9. QF——网络之JSON解析和XML解析

    JSON解析和XML解析: 用苹果原生的代理方式的网络请求后返回的都是二进制数据(NSData). 若是json,则通过NSJSONSerialization把NSData数据转换为JSON对象. N ...

随机推荐

  1. 用Raphael在网页中画圆环进度条

    原文 :http://boytnt.blog.51cto.com/966121/1074215 条状的进度条我们见得太多了,实现起来比较简单,它总是长方形的,在方形的区域里摆 放就不太好看了.随着cs ...

  2. Android JSON 解析库的使用 - Gson 和 fast-json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  3. 简单学C——第一天

    基本功 一.数据类型: 在C语言中,有数据类型这一说法.为何有这一说法?是因为在现实生活中存在着不同的数据,(例如整数,小数,字符即a b c d , . ; "  之类).由于计算机中所有 ...

  4. MFC 如何改变对话框按钮上的文字

    原文地址:http://blog.163.com/wenxianliang08@126/blog/static/8358326320110300643282/ 什么是标记菜单  如何标记菜单   如何 ...

  5. iOS 颜色选择器 仿ps 调色板

    前几天写东西,需要到调色板,自己网上搜了一下,好多都写得很麻烦,自己手敲了一个,使用很简单,飞虎不多说,上图,上代码,上使用教程,希望大家喜欢,(基于xcode7.0版本) 最后更新于15/12/14 ...

  6. 使用SSH代理上IPV6(使用SSH端口转发)

    这几个月在国外待着,一直担心我的六维账户怎么办,那可是个宝贝啊.我看网上说可以用六飞啊神马的在IPV6下上IPV6的网站,但是冒失现在六维封禁了非学校的IPV6地址,所以这些软件就不顶用了. 想到以前 ...

  7. Linux Kernel 释放后重用内存损坏漏洞

    漏洞名称: Linux Kernel 释放后重用内存损坏漏洞 CNNVD编号: CNNVD-201307-305 发布时间: 2013-07-18 更新时间: 2013-07-18 危害等级:    ...

  8. 数据结构(线段树):NOI 2016 区间

    [问题描述] [输入格式] [输出格式] [样例输入] 6 3 3 5 1 2 3 4 2 2 1 5 1 4 [样例输出] 2 [样例说明] [更多样例] 下载 [样例 2 输入输出] 见目录下的 ...

  9. FFT(快速傅里叶变换):HDU 4609 3-idiots

    3-idiots Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  10. 【模拟】NEERC15 G Generators(2015-2016 ACM-ICPC)(Codeforces GYM 100851)

    题目链接: http://codeforces.com/gym/100851 题目大意: n个序列.每个序列有4个值x,a,b,c,之后按照x=(a*x+b)%c扩展无穷项. 求每个序列各取一个数之后 ...