【iOS开发】原生XML解析
2016-01-13 23:50
357 查看
初始化方法:
Initializes a parser with the XML content referenced by the given URL.
Initializer
Initializes a parser with the XML contents encapsulated in a given data object.
Initializes a parser with the XML contents from the specified stream and parses it..
一个简单的xml文件解析
实例:
.h
#import <Foundation/Foundation.h>
@interface MyXMLParser : NSObject<NSXMLParserDelegate>
@property (nonatomic,strong) NSMutableArray *
arrM;
-(void)test;
@end
.m
#import "MyXMLParser.h"
#import "Student.h"
@interface MyXMLParser()
{
NSMutableString * _elementStr;
Student * student;
}
@end
@implementation MyXMLParser
-(void)test
{
NSString * path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"xml"];
NSXMLParser * parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL URLWithString:path]];
parser.delegate = self;
[parser parse];
}
#pragma mark - 解析开始
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
_arrM = [NSMutableArray array];
_elementStr = [NSMutableString string];
}
#pragma mark -解析完成
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"%@",_arrM);
}
#pragma mark -
-(void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName
namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
attributes:(nonnull NSDictionary<NSString *,NSString *>
*)attributeDict
{
if ([elementName isEqualToString:@"student"])
{
student = [[Student alloc]init];
}
[_elementStr setString:@""];
}
#pragma mark 循环查找节点内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// 拼接字符串
[_elementStr appendString:string];
}
#pragma mark 一个节点完成
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSString *result = [NSString stringWithString:_elementStr];
if ([elementName isEqualToString:@"student"])
{
[_arrM addObject:student];
} else if ([elementName isEqualToString:@"name"]){
student.name = result;
} else if ([elementName isEqualToString:@"sex"])
{
student.sex = result;
}
}
#pragma mark - 出错
-(void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError
{
[_arrM removeAllObjects];
NSLog(@"%@",@"出现错误
");
NSLog(@"%@",validationError.description);
}
@end
其他的代理方法不一一详述
- initWithContentsOfURL:
Initializes a parser with the XML content referenced by the given URL.
- initWithData:Designated
Initializer
Initializes a parser with the XML contents encapsulated in a given data object.
- initWithStream:
Initializes a parser with the XML contents from the specified stream and parses it..
一个简单的xml文件解析
实例:
.h
#import <Foundation/Foundation.h>
@interface MyXMLParser : NSObject<NSXMLParserDelegate>
@property (nonatomic,strong) NSMutableArray *
arrM;
-(void)test;
@end
.m
#import "MyXMLParser.h"
#import "Student.h"
@interface MyXMLParser()
{
NSMutableString * _elementStr;
Student * student;
}
@end
@implementation MyXMLParser
-(void)test
{
NSString * path = [[NSBundle mainBundle]pathForResource:@"test" ofType:@"xml"];
NSXMLParser * parser = [[NSXMLParser alloc]initWithContentsOfURL:[NSURL URLWithString:path]];
parser.delegate = self;
[parser parse];
}
#pragma mark - 解析开始
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
_arrM = [NSMutableArray array];
_elementStr = [NSMutableString string];
}
#pragma mark -解析完成
-(void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"%@",_arrM);
}
#pragma mark -
-(void)parser:(NSXMLParser *)parser didStartElement:(nonnull NSString *)elementName
namespaceURI:(nullable NSString *)namespaceURI qualifiedName:(nullable NSString *)qName
attributes:(nonnull NSDictionary<NSString *,NSString *>
*)attributeDict
{
if ([elementName isEqualToString:@"student"])
{
student = [[Student alloc]init];
}
[_elementStr setString:@""];
}
#pragma mark 循环查找节点内容
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
// 拼接字符串
[_elementStr appendString:string];
}
#pragma mark 一个节点完成
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSString *result = [NSString stringWithString:_elementStr];
if ([elementName isEqualToString:@"student"])
{
[_arrM addObject:student];
} else if ([elementName isEqualToString:@"name"]){
student.name = result;
} else if ([elementName isEqualToString:@"sex"])
{
student.sex = result;
}
}
#pragma mark - 出错
-(void)parser:(NSXMLParser *)parser validationErrorOccurred:(NSError *)validationError
{
[_arrM removeAllObjects];
NSLog(@"%@",@"出现错误
");
NSLog(@"%@",validationError.description);
}
@end
其他的代理方法不一一详述
相关文章推荐
- ios-AutoLayout(自动布局代码控制)简单总结
- iOS 知识储备
- 重新打包第三方框架ZBarSDK静态库,同时支持真机与模拟器测试
- ios的多线程
- iOS常见文件操作总结
- iOS 里面的iconfont问题
- iOS pickerView
- iOS性能优化三部曲(终极版)
- 高效开发iOS系列 -- 为Xcode添加删除行、复制行快捷键
- iOS中json解析出现的null,nil,NSNumber的问题
- iOS GCD详解
- 《从零开始自学iOS》_04
- iOS状态栏颜色设置
- iOS键盘隐藏,下一个textField,键盘控制第三方好用框架IQKeyboardManager
- IOS 打印素数与计算天数
- iOS开发中图片的一些处理操作(背景色,透明度,合成,大小)
- iOS XML,JOSN数据解析
- iOS下的2D仿射变换机制(CGAffineTransform相关)
- 【原创】第一个iOS应用程序
- 【原创】iOS开发入门教程