iOS-系统自带xml解析(自定义封装)
来源:互联网 发布:彩票通软件下载 编辑:程序博客网 时间:2024/06/08 18:44
说实话,神他么用过xml解析,只是调了几次这种接口,每次都要写,好麻烦,自己封装一下,以后会有用吧。
首先是基类
#import <Foundation/Foundation.h>
@interface XmlParsemanager : NSObject<NSXMLParserDelegate>
+(instancetype) shareInstance;
+(id) allocWithZone:(struct _NSZone *)zone;
@property (nonatomic,strong) NSMutableDictionary *resultDic;
@property (nonatomic,strong) NSString *currentElementRet;
@property (nonatomic,strong) NSString *currentElementVal;
@property (nonatomic,strong) AFHTTPRequestOperationManager *manager;
//
- (void)initset;
//请求数据的自定义
- (NSDictionary *)firstApplyWith:(NSDictionary *)parameters andUrl:(NSString *)url;
@end
#import "XmlParsemanager.h"
@implementation XmlParsemanager
static XmlParsemanager* _instance =nil;
+(instancetype) shareInstance
{
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
_instance = [[super allocWithZone:NULL] init] ;
[_instance initset];
}) ;
return _instance ;
}
+(id) allocWithZone:(struct _NSZone *)zone
{
return [XmlParsemanager shareInstance] ;
}
- (void)initset{
self.manager = [AFHTTPRequestOperationManager manager];
AFXMLParserResponseSerializer * responseSer = [AFXMLParserResponseSerializer new];
self.manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",nil];
[self.manager setResponseSerializer:responseSer];
}
- (NSDictionary *)firstApplyWith:(NSDictionary *)parameters andUrl:(NSString *)url{
[self.manager GET:url parameters:parameters success:^(AFHTTPRequestOperation *operation,id responseObject){
NSXMLParser * parser = (NSXMLParser *)responseObject;
parser.delegate = self;
[parser setShouldProcessNamespaces:YES];
//此法可行,但是处理麻烦
[parser parse];
if ([self.resultDic[@"Ret"] isEqualToString:@"0"] ) {
NSLog(@"登录成功!");
}else{
if ([self.resultDic[@"Ret"] isEqualToString:@"1"]) {
NSLog(@"登录失败!");
}elseif ([self.resultDic[@"Ret"] isEqualToString:@"2"]){
NSLog(@"密码错误!");
}
}
NSLog(@"requestFlagshipStoreData xml:%@",parser);
} failure:^(AFHTTPRequestOperation *operation,NSError *error) {
NSLog(@"requestFlagshipStoreData Error:%@",error);
}];
return self.resultDic;
}
#pragma mark - NSXMLParserDelegate委托处理
//在文档开始的时候触发
-(void)parserDidStartDocument:(NSXMLParser *)parser{
NSLog(@"解析开始!");
}
//解析起始标记
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{
NSLog(@"解析到一个元素的开头---%@",elementName);
// 根据需求的标签获取相关的数据
if ([elementName isEqualToString:@"Ret"]) {
// 在这里需要赋值
[self.resultDic setValue:@"占位数据Ret" forKey:@"Ret"];
// 将当前的标签值传给声明的标签属性
self.currentElementRet = elementName;
}
if ([elementName isEqualToString:@"Val"]) {
[self.resultDic setValue:@"占位数据Val" forKey:@"Val"];
// 将当前的标签值传给声明的标签属性
self.currentElementVal = elementName;
}
}
//解析文本节点
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
NSLog(@"值:%@",string);
// 从数组中取出相关的Student对象,每次取数组中最后的一个元素,保证值为最新的对象内容
if ([self.currentElementRet isEqualToString:@"Ret"]) {
// KVC
[self.resultDic setValue:string forKey:self.currentElementRet];
}
if ([self.currentElementVal isEqualToString:@"Val"]) {
// KVC
[self.resultDic setValue:string forKey:self.currentElementVal];
}
}
//解析结束标记
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
NSLog(@"解析到一个元素的结尾---%@",elementName);
self.currentElementRet =nil;
self.currentElementVal =nil;
}
//文档结束时触发
-(void) parserDidEndDocument:(NSXMLParser *)parser{
NSLog(@"解析结束!");
NSLog(@"Ret = %@",self.resultDic[@"Ret"]);
}
@end
- iOS-系统自带xml解析(自定义封装)
- IOS XML系统自带解析
- ios 自带xml 解析,TBXMLParser解析
- iOS系统自带控件 UIBarButtonSystemItem 的样式解析
- iOS 二维码(系统自带)
- 系统自带JSonObject解析
- IOS系统自带对话框
- iOS 系统自带定位
- iOS 系统自带定位
- android 自定义控件总结(不自带xml文件)
- 数据解析(一)解析XML之系统自带NSXMLParse类
- ios开发系统自带推送(ios自学笔记)
- ios系统自带推送(ios自学笔记)
- MTK自带的XML解析
- MTK自带的XML解析
- MTK自带的XML解析
- MTK自带的XML解析
- Java自带的XML解析
- 阿里云源
- 导航条下拉菜单
- 十行 js 获取带有双字节字符的字符串长度
- Java.math.BigInteger.testBit()方法实例 权限设置
- 星型和雪花型模式
- iOS-系统自带xml解析(自定义封装)
- Quartz 入门详解
- Android开发中如何引入Lambda表达式?
- Linux部署svn环境及创建新项目
- Qt中用QuaZip来压缩和解压缩文件
- 基于注解的Spring AOP的配置和使用--转载
- linux运维笔记1
- centos7下设置vim格式
- Cesium.js加载3D模型学习篇