本次解析使用的由Google提供的一个开源插件:GDataXmlNode对xml文件的解析。

导入GDataXmlNode文件和配置Xcode :http://blog.csdn.net/hmt20130412/article/details/24042499

题目:解析如下Xml文件,通过输入城市中文名,获取对应城市的首字母。 例如:输入常德  输出c

xml文件:

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 <plist version="1.0">
  4 <dict>
  5     <key>a</key>
  6     <array>
  7         <string>安吉</string>
  8         <string>安庆</string>
  9         <string>鞍山</string>
 10         <string>澳门</string>
 11     </array>
 12     <key>b</key>
 13     <array>
 14         <string>保定</string>
 15         <string>宝鸡</string>
 16         <string>包头</string>
 17         <string>北海</string>
 18         <string>北京</string>
 19         <string>蚌埠</string>
 20         <string>滨州</string>
 21     </array>
 22     <key>c</key>
 23     <array>
 24         <string>沧州</string>
 25         <string>长春</string>
 26         <string>常德</string>
 27         <string>长乐</string>
 28         <string>长沙</string>
 29         <string>常熟</string>
 30         <string>常州</string>
 31         <string>潮阳</string>
 32         <string>潮州</string>
 33         <string>承德</string>
 34         <string>成都</string>
 35         <string>郴州</string>
 36         <string>重庆</string>
 37         <string>滁州</string>
 38         <string>慈禧</string>
 39         <string>从化</string>
 40     </array>
 41     <key>d</key>
 42     <array>
 43         <string>大连</string>
 44         <string>丹东</string>
 45         <string>大庆</string>
 46         <string>大同</string>
 47         <string>德阳</string>
 48         <string>德州</string>
 49         <string>东莞</string>
 50         <string>东营</string>
 51     </array>
 52     <key>e</key>
 53     <array>
 54         <string>鄂尔多斯</string>
 55         <string>鄂州</string>
 56     </array>
 57     <key>f</key>
 58     <array>
 59         <string>奉化</string>
 60         <string>佛山</string>
 61         <string>抚顺</string>
 62         <string>阜阳</string>
 63         <string>福州</string>
 64     </array>
 65     <key>g</key>
 66     <array>
 67         <string>赣州</string>
 68         <string>广州</string>
 69         <string>桂林</string>
 70         <string>贵阳</string>
 71     </array>
 72     <key>h</key>
 73     <array>
 74         <string>哈尔滨</string>
 75         <string>海口</string>
 76         <string>海拉尔</string>
 77         <string>邯郸</string>
 78         <string>杭州</string>
 79         <string>合肥</string>
 80         <string>鹤岗</string>
 81         <string>衡阳</string>
 82         <string>鹤山</string>
 83         <string>河源</string>
 84         <string>花都</string>
 85         <string>淮安</string>
 86         <string>淮北</string>
 87         <string>淮南</string>
 88         <string>黄石</string>
 89         <string>呼和浩特</string>
 90         <string>惠东</string>
 91         <string>惠阳</string>
 92         <string>惠州</string>
 93         <string>葫芦岛</string>
 94         <string>湖州</string>
 95         <string>怀化</string>
 96     </array>
 97     <key>j</key>
 98     <array>
 99         <string>江都</string>
100         <string>江门</string>
101         <string>姜堰</string>
102         <string>江阴</string>
103         <string>焦作</string>
104         <string>嘉兴</string>
105         <string>揭阳</string>
106         <string>吉林</string>
107         <string>济南</string>
108         <string>荆门</string>
109         <string>荆沙</string>
110         <string>金华</string>
111         <string>济宁</string>
112         <string>晋江</string>
113         <string>晋中</string>
114         <string>锦州</string>
115         <string>九江</string>
116     </array>
117     <key>k</key>
118     <array>
119         <string>开封</string>
120         <string>开平</string>
121         <string>昆明</string>
122         <string>昆山</string>
123     </array>
124     <key>l</key>
125     <array>
126         <string>莱芜</string>
127         <string>莱西</string>
128         <string>廊坊</string>
129         <string>兰州</string>
130         <string>连云港</string>
131         <string>聊城</string>
132         <string>列东</string>
133         <string>醴陵</string>
134         <string>临汾</string>
135         <string>临沂</string>
136         <string>丽水</string>
137         <string>浏阳</string>
138         <string>柳州</string>
139         <string>龙岩</string>
140         <string>六安</string>
141         <string>陆丰</string>
142         <string>漯河</string>
143         <string>洛阳</string>
144         <string>泸州</string>
145     </array>
146     <key>m</key>
147     <array>
148         <string>茂名</string>
149         <string>梅州</string>
150         <string>绵阳</string>
151     </array>
152     <key>n</key>
153     <array>
154         <string>南昌</string>
155         <string>南充</string>
156         <string>南京</string>
157         <string>南宁</string>
158         <string>南平</string>
159         <string>南通</string>
160         <string>南阳</string>
161         <string>内江</string>
162         <string>宁波</string>
163     </array>
164     <key>p</key>
165     <array>
166         <string>盘锦</string>
167         <string>番禺</string>
168         <string>平顶山</string>
169         <string>莆田</string>
170         <string>濮阳</string>
171     </array>
172     <key>q</key>
173     <array>
174         <string>启东</string>
175         <string>青岛</string>
176         <string>清远</string>
177         <string>秦皇岛</string>
178         <string>钦州</string>
179         <string>琼海</string>
180         <string>齐齐哈尔</string>
181         <string>全国</string>
182         <string>泉州</string>
183         <string>衢州</string>
184     </array>
185     <key>r</key>
186     <array>
187         <string>日照</string>
188     </array>
189     <key>s</key>
190     <array>
191         <string>三河</string>
192         <string>三亚</string>
193         <string>上海</string>
194         <string>上虞</string>
195         <string>汕头</string>
196         <string>汕尾</string>
197         <string>韶关</string>
198         <string>绍兴</string>
199         <string>邵阳</string>
200         <string>沈阳</string>
201         <string>深圳</string>
202         <string>石家庄</string>
203         <string>石狮</string>
204         <string>十堰</string>
205         <string>寿光</string>
206         <string>四会</string>
207         <string>随州</string>
208         <string>苏州</string>
209     </array>
210     <key>t</key>
211     <array>
212         <string>泰安</string>
213         <string>台山</string>
214         <string>太原</string>
215         <string>泰州</string>
216         <string>台州</string>
217         <string>塘沽</string>
218         <string>唐山</string>
219         <string>天津</string>
220         <string>铜陵</string>
221     </array>
222     <key>w</key>
223     <array>
224         <string>潍坊</string>
225         <string>威海</string>
226         <string>渭南</string>
227         <string>温州</string>
228         <string>武汉</string>
229         <string>芜湖</string>
230         <string>吴江</string>
231         <string>乌鲁木齐</string>
232         <string>无锡</string>
233         <string>梧州</string>
234     </array>
235     <key>x</key>
236     <array>
237         <string>厦门</string>
238         <string>西安</string>
239         <string>襄樊</string>
240         <string>香港</string>
241         <string>湘潭</string>
242         <string>咸宁</string>
243         <string>咸阳</string>
244         <string>兴宁</string>
245         <string>邢台</string>
246         <string>西宁</string>
247         <string>新乡</string>
248         <string>宣城</string>
249         <string>许昌</string>
250         <string>徐州</string>
251     </array>
252     <key>y</key>
253     <array>
254         <string>盐城</string>
255         <string>阳江</string>
256         <string>阳泉</string>
257         <string>阳朔</string>
258         <string>扬州</string>
259         <string>烟台</string>
260         <string>宜昌</string>
261         <string>银川</string>
262         <string>英德</string>
263         <string>义务</string>
264         <string>宜兴</string>
265         <string>仪征</string>
266         <string>永康</string>
267         <string>岳阳</string>
268         <string>云浮</string>
269         <string>玉林</string>
270         <string>玉溪</string>
271         <string>余姚</string>
272     </array>
273     <key>z</key>
274     <array>
275         <string>湛江</string>
276         <string>肇庆</string>
277         <string>招远</string>
278         <string>郑州</string>
279         <string>镇江</string>
280         <string>中山</string>
281         <string>周口</string>
282         <string>舟山</string>
283         <string>珠海</string>
284         <string>诸暨</string>
285         <string>株洲</string>
286         <string>淄博</string>
287         <string>自贡</string>
288     </array>
289 </dict>
290 </plist>

View Code

新建了一个类Xml解析类:ParseAlphAndCityName.h

 1 #import <Foundation/Foundation.h>
 2
 3 @interface ParseAlphAndCityName : NSObject
 4 {
 5     NSMutableDictionary *_alphAndCityNameList;
 6 }
 7
 8 @property (retain,nonatomic)NSMutableDictionary *alphAndCityNameList;
 9
10
11 - (id)init;
12
13
14 - (void)parseXml:(NSString *)xmlFilePath;
15
16
17 + (void)test:(NSString *)xmlFilePath;
18
19 @end

ParseAlphAndCityName.m

最主要的是parseXml:(NSString *)xmlFilePath;方法。利用了主流的对xml的解析方法。

不多说:看代码,已经注释的很清楚了。

 1 #import "ParseAlphAndCityName.h"
 2 #import "GDataXMLNode.h"
 3
 4
 5 @implementation ParseAlphAndCityName
 6
 7 -(id)init
 8 {
 9     if (self = [super init]) {
10         self->_alphAndCityNameList = [[NSMutableDictionary alloc] init];
11     }
12
13     return self;
14 }
15
16
17 - (void)parseXml:(NSString *)xmlFilePath
18 {
19     //将xml文件读取称二进制对象
20     NSData *xmlData = [[NSData alloc] initWithContentsOfFile:xmlFilePath];
21     //获取document对象,xml文档对象
22     GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:nil];
23     //获取根节点对象
24     GDataXMLElement *rootElement = [document rootElement];
25
26     //获取指定路径的所有节点 返回值为数组对象
27     GDataXMLElement *dict = [[rootElement nodesForXPath:@"./dict" error:nil] objectAtIndex:0];
28     //获取当前节点dict下的所有名为key节点的值
29     NSArray *keyArray = [dict elementsForName:@"key"];
30
31     //获取指定路径所有的array节点 返回值为数组对象
32     NSArray *arrayArray = [rootElement nodesForXPath:@"./dict/array" error:nil];
33
34     NSInteger len = [keyArray count];
35
36     //遍历
37     for (NSInteger i=0; i<len; i++) {
38         //将节点的值转为字符串对象
39         NSString *alString = [[keyArray objectAtIndex:i] stringValue];
40
41         //创建一个可变数组存储城市名称
42         NSMutableArray *cityChinaNames = [[NSMutableArray alloc] init];
43         //获取当前array节点所有名为string节点的值
44         NSArray *elementsValue = [[arrayArray objectAtIndex:i] elementsForName:@"string"];
45         for (GDataXMLElement *item in elementsValue) {
46             //可变数组中加入城市名称
47             [cityChinaNames addObject:[item stringValue]];
48         }
49
50         //将对应的字母和和城市数组对象添加到字典中
51         [self.alphAndCityNameList setObject:cityChinaNames forKey:alString];
52     }
53 }
54
55
56 + (void)test:(NSString *)xmlFilePath
57 {
58     char cityName[100] = {};
59     scanf("%s",cityName);
60
61     ParseAlphAndCityName *parseXml = [[ParseAlphAndCityName alloc] init];
62     [parseXml parseXml:xmlFilePath];
63
64     for (NSString *key in parseXml.alphAndCityNameList) {
65         NSArray *citys = [parseXml.alphAndCityNameList objectForKey:key];
66         if ([citys containsObject:[NSString stringWithUTF8String:cityName]]) {
67             NSLog(@"%@",key);
68         }
69     }
70
71 }
72
73 @end

main.m文件

#import "ParseAlphAndCityName.h"#define XmlFilePath @"/Users/qianfeng/Desktop/day23_OC13_xml文件/day23_OC13_XML城市解析_练习/qfile.xml"int main(int argc, const char * argv[]) {@autoreleasepool {[ParseAlphAndCityName test:XmlFilePath];}return 0;
}

转载于:https://www.cnblogs.com/BeyondAverage0908/p/4601898.html

OC-Xml文件解析相关推荐

  1. Android开发历程_18(XML文件解析)

    前言  本文主要介绍在Android中怎样来解析XML文件.主要采用的是SAX机制,SAX全称为Simple API for XML,它既是一种接口,也是一个软件包.作为接口,SAX是事件驱动型XML ...

  2. java怎么xml文件解析_Java对Xml文件解析

    JAVA 解析 XML 通常有两种方式,DOM 和 SAX. DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一 ...

  3. Python3将xml文件解析为Python对象

    一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...

  4. 【VOC格式xml文件解析】——Python

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/4/26 12:49 # @Author : @linlianqin # @S ...

  5. dom4j工具类_基于DOM4J的XML文件解析类

    XML文件解析分四类方式:DOM解析:SAX解析:JDOM解析:DOM4J解析.其中前两种属于基础方法,是官方提供的平台无关的解析方式:后两种属于扩展方法,它们是在基础的方法上扩展出来的,只适用于ja ...

  6. XML文件解析-DOM4J方式和SAX方式

    最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...

  7. Android学习笔记之AndroidManifest.xml文件解析(摘自皮狼的博客)

    Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它 ...

  8. XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 查找校验xml文件中相同的节点属性值 java遍历文件夹解析XML

    XML解析 (JAVA解析xml文件)java+Dom4j+Xpath xml文件解析根据子节点得到父节点 以及查找xml文件中相同的节点属性值 项目背景:这是本人实习中所碰到的项目,当时感觉很棘手, ...

  9. XML - XML学习/XML文件解析器(C++)实现

    XML - XML学习/XML文件解析器(C++)实现 XML概述 ​ XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识.它也是元标记语言,用于定义其他与特定领域有关的, ...

  10. android基础知识13:AndroidManifest.xml文件解析【转载】

    注:本文转载于:http://blog.csdn.NET/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...

最新文章

  1. Python 学习笔记: 反射
  2. python魔法方法好难_一篇干货好文,轻松掌握python魔法方法
  3. (数据结构与算法)单链表与双链表增删改查的实现。
  4. SpringBoot-服务端参数验证-JSR-303验证框架
  5. python特性、属性以及私有化
  6. apache2.4 php5.6.30,php5.6.3 + apache2.4.25 安装配置
  7. 7-3 DAG图优化-A (15 分)(更新版)
  8. markdown编辑器------------编辑方法
  9. Lintcode-37 Python语言
  10. 如何下载安装 Visual Studio2010
  11. Fedora9 问题集锦
  12. 一个线程OOM,进程里其他线程还能运行么
  13. RTX2012概述-1
  14. 全网首发Modown主题8.31开心版
  15. 3-8 Aruba交换机实用配置-链路聚合 2020
  16. Java入门第三天2-java循环嵌套
  17. IC基础——FIFO
  18. 【Rust日报】2021-12-15 - geoping 由 shodan 开发的多地 ping 工具
  19. linux系统yum 安装postgresql
  20. 有奖互动 | 打工人、爱码士都看这里

热门文章

  1. 《UNIX网络编程》配置unp.h头文件
  2. linux系统下王者荣耀,在Linux下可用Wine安装和运行腾讯手游助手、王者荣耀电脑版...
  3. 卸载腾讯手游模拟器的方法
  4. 字符串转化为json对象和json数组
  5. 哥伦比亚 计算机 硕士几年,哥伦比亚大学金融工程硕士学制几年?
  6. C# SQLite 数据库基本操作
  7. Q新闻丨Java 9正式版恐再延期;顺丰菜鸟口水战涉及阿里云;编程语言排行榜Python第四;盲人程序员背百万字符,用耳朵编程...
  8. 针对safecast数据集的数据清洗
  9. StudyNotes_MachineLearning_3(吴恩达机器学习公开课)
  10. 嵌入式uClinux及其应用开发(1)