您的位置:首页 > 移动开发 > IOS开发

IOS XML系统自带解析

2016-06-08 17:42 579 查看
在IOS开发过程中,苹果自带XML解析功能,给用户解析XML带来啦极大的便捷,使用如下:

调用系统解析

必须遵循NSXMLParserDelegate 协议

- (void)viewDidLoad
{
[super viewDidLoad];
//指定xml文件
NSString *path=[[NSBundle mainBundle] pathForResource:@"person.xml" ofType:nil];
//转化为二进制对象
NSData *data=[NSData dataWithContentsOfFile:path];
//为person指定初始值
NSXMLParser *parson=[[NSXMLParser alloc]initWithData:data];
//指定代理
parson.delegate=self;
//解析
BOOL b=[parson parse];
if (b){
NSLog(@"解析成功");
}
}


开始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser
{
self.arr=[NSMutableArray array];
}


解析结束

-(void)parserDidEndDocument:(NSXMLParser *)parser
{
NSLog(@"%@",self.arr);
}


解析过程

当文件遇到User元素时,创建一个字典用于接收

/***  文档元素解析开始 (当文件遇到User元素时,创建一个字典用于接收)
*  @param parser        解析的对象
*  @param elementName   文档里元素名称
*  @param namespaceURI  命名空间
*  @param qName
*  @param attributeDict 属性的字典
*/
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString*)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict
{
//在文档中User元素时,初始化字典
if ([elementName isEqualToString:@"User"])
{
self.dicM=[NSMutableDictionary dictionary];
//添加字典元素
[self.dicM setDictionary:attributeDict];
}
}


将符合关键字的元素d添加到字典中

/***  解析文件元素的内容
*  @param parser       解析对象
*  @param elementName  文档里元素名称
*  @param namespaceURI 命名空间
*  @param qName
*/
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//判断元素的关键字,只有符合的才将元素添加到字典
if ([elementName isEqualToString:@"name"])
{
[self.dicM setObject:self.str forKey:elementName];
}
else if ([elementName isEqualToString:@"age"])
{
[self.dicM setObject:self.str forKey:elementName];
}
只有见到User才将字典添加到集合
else if ([elementName isEqualToString:@"User"])
{
[self.arr addObject:self.dicM];
}
}


得到数据关键字的值

/***  解析文件元素的内容
**   @param parser 解析对象
*    @param string 显示的文件的内容
*/
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
self.str=string;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: