IOS XML解析
来源:互联网 发布:二叉树的先序遍历算法 编辑:程序博客网 时间:2024/05/29 16:02
xml文件中需要解析的数据节点单个样式
<AirlinesTime diffgr:id="AirlinesTime1" msdata:rowOrder="0"> <Company>吉祥航空</Company> <AirlineCode>HO1252</AirlineCode> <StartDrome>北京首都国际机场</StartDrome> <ArriveDrome>上海虹桥国际机场</ArriveDrome> <StartTime>06:35</StartTime> <ArriveTime>09:00</ArriveTime> <Mode>320</Mode> <AirlineStop>0</AirlineStop> <Week>123456日</Week> </AirlinesTime>
1. 在.h文件中加入协议
NSXMLParserDelegate
2.在.h文件中定义3个属性,用于解析过程中的存值和保存所有解析完成的数据
@property (strong,nonatomic)NSMutableString *bodyStr;//解析出来的内容暂存字符串
@property (strong,nonatomic)NSMutableDictionary *currDic;//数据键值对
@property (strong,nonatomic)NSMutableArray *listPlaneCodes;//存放解析完对象的集合
3.在.m文件中,找地方初始化上面的3个属性
viewDidLoad中:
//初始化解析用到的变量
self.listPlaneCodes = [[NSMutableArrayalloc] init];
self.bodyStr = [[NSMutableStringalloc] init];
因为要记录每个节点的键值,currDic在解析过程中进行初始化。
4.初始化parser并开始进行解析
//解析数据
//利用需要解析的xml数据data进行初始化
NSXMLParser *parser = [[NSXMLParseralloc] initWithData:data];
//设置代理,以便使用其回调方法进行数据解析
[parsersetDelegate:self];
5.解析过程在所添加协议的回调方法中进行
//节点开始
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
//判断当前节点名,NSOrderedSame用以判断字符串是否相等
if (NSOrderedSame == [elementNamecompare:@"AirlinesTime"]) {
//初始化字典
self.currDic = [[NSMutableDictionaryalloc] init];
}
}
//节点中间,节点开始标签和结束标签之间,处理内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//非空判断
if (string != nil) {
//去处特殊字符,空格和下划线之类
NSString *trim = [stringstringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];
//将读取到的内容存入准备好的字符串中
[_bodyStrappendFormat:@"%@",trim];
}
}
//节点结束
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//判断节点名
if (NSOrderedSame == [elementNamecompare:@"Company"]) {
//存入字典
[_currDicsetObject:[self.bodyStrcopy] forKey:@"Company"];
}
else if (NSOrderedSame == [elementNamecompare:@"AirlineCode"]) {
//存入字典
[_currDicsetObject:[self.bodyStrcopy] forKey:@"AirlineCode"];
}
else if (NSOrderedSame == [elementNamecompare:@"StartDrome"]) {
//存入字典
[_currDicsetObject:[self.bodyStrcopy] forKey:@"StartDrome"];
}
else if (NSOrderedSame == [elementNamecompare:@"ArriveDrome"]) {
//存入字典
[_currDicsetObject:[self.bodyStrcopy] forKey:@"ArriveDrome"];
}
else if (NSOrderedSame == [elementNamecompare:@"Week"]) {
//存入字典
[_currDicsetObject:[self.bodyStrcopy] forKey:@"Week"];
}
//读取到数据结构结束节点
else if (NSOrderedSame == [elementNamecompare:@"AirlinesTime"]) {
//将准备好数据的字典,作为对象存放到准备好的集合中
[_listPlaneCodesaddObject:_currDic];
_currDic = nil;
}
//清空存数据值的字符串,清除长度根据字符串自己的长度
[_bodyStrdeleteCharactersInRange:NSMakeRange(0,[_bodyStrlength])];
}
6.解析结束
//如果解析完成,则返回true
BOOL flag = [parser parse];
if (flag) {
//解析成功
}else{
//解析失败
}
- IOS开发解析XML
- ios xml解析
- iOS XML解析器
- ios XML解析
- iOS中XML解析
- iOS解析xml
- [iOS] XML解析
- iOS开发解析XML
- iOS XML解析器
- ios xml解析
- ios xml解析
- ios----xml解析
- IOS解析XML文件
- IOS开发 解析XML
- iOS XML解析
- IOS 解析XML
- ios xml解析
- IOS 解析XML
- WIKIOI 1569 最佳绿草
- uva 10000 Longest Paths (SPFA)
- Splitting Attribute measure in Decision Tree Learning (ML)
- 微软云技术Windows Azure专题(一):如何利用Service Bus向Windows商店应用推送消息
- 优秀网站收集
- IOS XML解析
- MongoDB README
- Eclipse中如何关联Javadoc
- Matlab矩阵生成方式
- 博客已移至博客园
- 【leetcode】Balanced Binary Tree
- yum安装lamp环境
- 01背包、完全背包、多重背包
- paip.解决 Gtk-CRITICAL **: IA__gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed