UI - XMLParser

来源:互联网 发布:免费oa软件 编辑:程序博客网 时间:2024/06/07 10:43


<ViewController.h>

#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end

<ViewController.m>

#import "ViewController.h"#import "GDataXMLNode.h"@interface ViewController ()<NSXMLParserDelegate>@property (nonatomic,copy)NSString *toName;//收件人@property (nonatomic,copy)NSString *fromName;//发件人@property (nonatomic,copy)NSString *messageContent;//内容@property (nonatomic,copy)NSString *date;//日期@property (nonatomic,copy)NSString *content;//存储标签内的内容@property (nonatomic,retain)NSMutableDictionary *categoryDic; //存储解析后的数据@property (nonatomic,retain)NSMutableArray *categoryArr;//存储类别数据@end@implementation ViewController/* 解析:以一种约定好的格式,后台开发人员将数据进行存储,前端开发人员按照这种格式进行数据的读取过程,数据的格式由后台开发人员决定,我们无权规定; 当今比较流行的两种数据形式为 XML 和 JSON , 其实对我们来说,解析就是从 XML 或者 JSON 数据格式中进行数据的获取;1.XML 解析有两种方式: SAX 解析和 DOM 解析; SAX解析: SAX解析基于事件回调,也就是通过代理协议方法回调的方式进行数据解析,也就是将数据一行一行读入内存,然后一行一行地进行数据的获取;2.DOM 解析:DOM 解析是将数据整体读入内存,形成属性的数据结构形式,然后根据属性结构特点进行数据堆区,适合小型的数据,一般我们使用 Google 提供的第三方开源类库 GDataXMLNode*/// ================================ SAX解析 ==================================// SAX解析- (IBAction)SAXXMLParser:(id)sender {        //创建外部字典    self.categoryDic = [NSMutableDictionary dictionary];        NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Categories 2" ofType:@"xml"];    //1.获取文件路径//    NSString *filePath = [[NSBundle mainBundle]pathForResource:@"Message" ofType:@"xml"];    //2.通过路径获取 NSData 数据对象    NSData *parserData = [NSData dataWithContentsOfFile:filePath];    //3.创建解析对象    NSXMLParser *parser = [[NSXMLParser alloc]initWithData:parserData];    //4.设置代理    parser.delegate = self;        //5.开始解析    ,下面的代理方法都是由这步开始执行的    [parser parse];        //6.对解析后的数据进行处理    //    NSLog(@"发件人:%@,收件人:%@,内容:%@,时间:%@",self.fromName,self.toName,self.messageContent,self.date);//            //遍历数据字典    for (NSString *key in _categoryDic) {        //通过 key 获取对应分组        NSMutableArray *group = [_categoryDic valueForKey:key];        //遍历分组        for (NSString *str in group) {            NSLog(@"%@",str);        }    }    }#pragma mark - ParserDelegate//读取到开始标签-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{    //打印开始标签的名字    NSLog(@"%@",elementName);            //读取到category_name的时候进行数组的创建    if ([elementName isEqualToString:@"category_name"]) {        self.categoryArr = [NSMutableArray array ];    }}//读取到内容-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{    //打印内容    NSLog(@"%@",string);        //获取内容    self.content = string;}//读取到结束标签-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{    //打印结束标签名字    NSLog(@"%@",elementName);    //    //将读取的值赋给属性//    if ([elementName isEqual:@"to"]) {//        self.toName = _content;//    }else if ([elementName isEqual:@"content"])//    {//        self.messageContent = _content;//    }else if ([elementName isEqual:@"from"])//    {//        self.fromName = _content;//    }else if ([elementName isEqual:@"date"])//    {//        self.date = _content;//    }            if ([elementName isEqualToString:@"category_name"]) {        [self.categoryDic setValue:self.categoryArr forKey:_content];        NSLog(@"11111");    }else    {        //NSLog(@"dsakjfewklhfnklsd");        //存储_ conten 内容        [_categoryArr addObject:_content];    }     }//========================= DOM 解析 ========================//对于 DOM 解析我们需要进行三步配置://1.在 Build Phases 中的 Link Binary With Libraries 中导入动态链接库, libxml2.2.dylib//2.在 build setting 中的 Header Search Paths 中添加 /usr/include/libml2//3.在 build setting 中的 Other Linker Flags 中添加 -lxml2//DOM 解析- (IBAction)DOMXMLParser:(id)sender {        //1.获取文件路径    NSString *filePath = [[NSBundle mainBundle ]pathForResource:@"Categories 2" ofType:@"xml"];    //2.初始化 xmlString    NSString *xmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];    //3.将 xmlString 读入 GDataXMLDocument    GDataXMLDocument *document = [[GDataXMLDocument alloc]initWithXMLString:xmlString options:0 error:nil];        //绝对路径方法获取节点//    //4.获取根节点//    GDataXMLElement *rootElement = [document rootElement];//    //5.获取子节点//    NSArray *elements = [rootElement elementsForName:@"categories"];//需要用数组接收//    GDataXMLElement *element = [elements firstObject];//    //    NSArray *categoryArr = [element elementsForName:@"subcategories"];//    for (GDataXMLElement *a in categoryArr) {//        NSLog(@"%@",[a stringValue]);//    }        //4.根据相对路径进行节点获取    NSArray *elements = [document nodesForXPath:@"//subcategories" error:nil];    for (GDataXMLElement *element in elements) {        NSLog(@"%@",[element stringValue]);    } }- (void)viewDidLoad {    [super viewDidLoad];    // Do any additional setup after loading the view, typically from a nib.}- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end


0 0
原创粉丝点击