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

iOS XML 系统自带的解析方法

2016-03-28 20:38 447 查看
XML 文档解析 使用的五个代理方法
1.文档解析开始 parserDidStartDocument:
2.文档解析结束 parserDidEndDocument:
3.文档 解析元素 开始 didStartElement:
4.文档 解析元素 结束 didEndElement:
5.解析 文档元素 的内容 parser foundCharacters:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<NSXMLParserDelegate>
/**
*  全局的集合 用来添加字典的
*/
@property(strong,nonatomic) NSMutableArray *arr;
/**
*  显示对应的 元素名称和value值
*/
@property(strong,nonatomic) NSMutableDictionary *dic;
/**
*  表面上是 str 实际上是 字典中的value值
*/
@property(strong,nonatomic) NSString *str;

@end

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

//系统自带 XML文件解析
- (void)viewDidLoad
{
[super viewDidLoad];
//指定 xml 文件
NSString *path=[[NSBundle mainBundle] pathForResource:@"person" ofType:@"xml"];
//转化成 data 对象
NSData *data=[NSData dataWithContentsOfFile:path];
//为parser 指定初始值
NSXMLParser *parser=[[NSXMLParser alloc] initWithData:data];

parser.delegate=self;
BOOL bol=[parser parse];
//返回解析的结果
NSLog(@"bol is %d",bol);

}
/**
*  代理使用的五个方法
*
*/
/**
*  文档解析开始  StartDocument
*
*  @param parser
*/
-(void)parserDidStartDocument:(NSXMLParser *)parser
{
//初始化
self.arr=[NSMutableArray array];

}
/**
*  文档解析结束  EndDocument
*
*  @param parser
*/

-(void)parserDidEndDocument:(NSXMLParser *)parser
{
//输出集合的内容
NSLog(@"%@",self.arr);
}
/**
*  文档 解析元素 开始 StartElement
*
*  @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元素 开始初始化字典 dic
if ([elementName isEqualToString:@"User"])
{
//向字典中添加属性元素
self.dic=[NSMutableDictionary dictionary];
[self.dic setDictionary:attributeDict];
}}
/**
*  文档 解析元素 结束 EndElement
*
*  @param parser        解析的对象
*  @param elementName   元素的名称
*  @param namespaceURI  命名空间
*  @param qName         查的描述信息
*  @param attributeDict 属性的字典
*/
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
//判断元素的关键字 只有符合 name或age 的时候才向字典中添加元素
if ([elementName isEqualToString:@"name"]||[elementName isEqualToString:@"age"])
{
//dic中已经包含了 3 个键值对
[self.dic setObject:self.str forKey:elementName];
}
//直到找到 User 元素标签时 才向arr中添加字典 即dic
else if([elementName isEqualToString:@"User"])
{
[self.arr addObject:self.dic];
}
}

/**
*  解析 文件元素 的内容  foundCharacters
*
*  @param parser 解析对象
*  @param string 显示的文本内容
*/
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
//将局部的字符串赋值给 str
self.str=string;
}

@end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: