zoukankan      html  css  js  c++  java
  • iOS XML  解析(原生的)

    #import <UIKit/UIKit.h>
    
    @interface AppDelegate : UIResponder <UIApplicationDelegate>
    
    @property (strong, nonatomic) UIWindow *window;
    
    
    @end
    #import "AppDelegate.h"
    #import "RootViewController.h"
    
    @interface AppDelegate ()
    
    @end
    
    @implementation AppDelegate
    
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.backgroundColor = [UIColor whiteColor];
        
        self.window.rootViewController = [[RootViewController alloc] init];
        
        [self.window makeKeyAndVisible];
        return YES;
    }
    
    
    @end
    #import <UIKit/UIKit.h>
    
    @interface RootViewController : UIViewController
    
    @end
    #import "RootViewController.h"
    #import "NoteXMLParser.h"
    @interface RootViewController ()
    
    @end
    
    @implementation RootViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        NoteXMLParser *parser = [[NoteXMLParser alloc] init];
        [parser start];
    }
    
    @end
    #import <Foundation/Foundation.h>
    
    @interface NoteXMLParser : NSObject<NSXMLParserDelegate>
    
    @property (strong, nonatomic) NSMutableArray *notes;
    
    /**
     *  当前标签的名字,currentTagName 用于存储正在解析的元素名
     */
    @property (strong, nonatomic) NSString *currentTagName;
    
    /**
     *  开始解析
     */
    - (void)start;
    
    @end
    #import "NoteXMLParser.h"
    
    @implementation NoteXMLParser
    
    // 开始解析
    - (void)start{
        NSString *path = [[NSBundle mainBundle] pathForResource:@"some" ofType:@"xml"];
        NSURL *url = [NSURL fileURLWithPath:path];
        
        // 开始解析xml
        NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
        parser.delegate = self;
        
        [parser parse];
        
    }
    /**
     *  解析到文档的开头时会调用
     */
    - (void)parserDidStartDocument:(NSXMLParser *)parser{
        _notes = [[NSMutableArray alloc] init];
    }
    
    /**
     *  解析到一个元素的开始就会调用
     *
     *  @param elementName   元素名字
     *  @param attributeDict 属性字典
     */
    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict{
       /* 一般情况,如果数据是这种格式,把内容放到属性中
        <CrReportByHour Hour=@"10" Caption=@"10-12" CrChannel=@"0.8" CrRegion=@"0.6" CrArea=@"0.7"/>
        系统会自动把以上内容转为字典存放到attributeDict这个字典中
        可以用KVC通过字典给模型直接复制(字典中的key必须都能在模型中找到)
        */
        _currentTagName = elementName;
        NSLog(@"====elementName: %@~~~namespaceURI:%@~~~attributeDict=%@---qName=%@",elementName,namespaceURI,attributeDict,qName);
    }
    // 遇到字符串时触发
    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{
        //替换回车符 和空格,其中 stringByTrimmingCharactersInSet 是剔除字符的方法,[NSCharacterSet whitespaceAndNewlineCharacterSet]指定字符集为换行符和回车符;
        string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
        if ([_currentTagName isEqualToString:@"Hour"]) {
            NSLog(@"*************string:%@",string);
        }
        
    }
    /**
     *  解析到一个元素的结束就会调用
     *  @param elementName  元素名字
     */
    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{
        NSLog(@"结束的元素名称:%@",elementName);
    }
    /**
     *  解析到文档的结尾时会调用(解析结束)
     */
    - (void)parserDidEndDocument:(NSXMLParser *)parser{
        NSLog(@"结束解析");
    }
    
    //文档出错时触发
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{
        NSLog(@"解析出错");
    }
    
    @end
  • 相关阅读:
    IP和MAC
    ASCII,Unicode 和 UTF-8
    php(PHP Hypertext Preprocessor)随笔1
    css层叠样式表 (Cascading Style Sheets)初识
    ansible部署
    mysql三种备份方式
    nginx反向代理,负载均衡,动静分离,rewrite地址重写介绍
    Maven安装和配置
    jenkins之Tomcat7+jdk1.7+jenkins
    CentOS 7.0如何安装配置iptables和seLinux以及firewalld
  • 原文地址:https://www.cnblogs.com/lantu1989/p/5092139.html
Copyright © 2011-2022 走看看