zoukankan      html  css  js  c++  java
  • iOS的XML解析

      // xml文件的样式 的样式有多种样式,标准的是把数据存放在子节点中,还有就是比较简单的读取就是把数据直接存在属性里面

    // 第一种,这是自己写出来的一种,把数据存储在子节点中,读取相对麻烦一些
    IOS <wbr>XML数据的解析

     
    // 第二种是从中国气象网的api上街区出来的一段,是把数据存储在了属性中,比较容易读取数据
    IOS <wbr>XML数据的解析

     
     
     
    // 下面是解析第一种样式的代码:
    // 头文件

    #import

    @interface RootViewController : UIViewController<</span>NSXMLParserDelegate>

    #pragma mark - 声明--属性

    @property (nonatomic, retain) NSMutableArray *messageeListArray; // 数据存储的地方

    @property (nonatomic, retain) NSString *fromTagFlag; // 开始标签

    @end

    // 实现文件

    #import "RootViewController.h"

    @interface RootViewController ()

    @end

    @implementation RootViewController

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil

    {

        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self) {

            // Custom initialization

        }

        return self;

    }

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        // 获取xml字符串类型文件名

        NSString *xmlDocPath = [[NSBundle mainBundle] pathForResource:@"document"ofType:@"xml"];

        // 把字符串类型的网址转为NSURL类型

        NSURL *url =[[NSURL alloc] initFileURLWithPath:xmlDocPath];

        // 使用url实例化网络请求实例

        NSURLRequest *request = [NSURLRequest requestWithURL:url];

        // 同步读取到网络上的数据

        NSData *urlData = [NSURLConnection sendSynchronousRequest:requestreturningResponse:nil error:nil];

        

        

        // 实例化一个具体的解析类对象

        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:urlData];

        // 设置该解析类对象的代理

        xmlParser.delegate = self;

        // 调用方法开始解析xml文件

        [xmlParser parse];

        

    }

    #pragma mark - NSXMLParser Delegate -

    #pragma mark 文档开始读取

    - (void)parserDidStartDocument:(NSXMLParser *)parser {

        // 实例化存储数据的数组

        self.messageeListArray = [NSMutableArray array];

    }

    #pragma mark 解析标签开始

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

        // 首先用属性fromTagFlag获取ElementName,供后面使用

        self.fromTagFlag = elementName;

        // 判断

        if ([elementName isEqualToString:@"Message"]) {

            NSString *identifier = [attributeDict objectForKey:@"id"];

            NSMutableDictionary *oneDic = [NSMutableDictionary dictionary];

            [oneDic setObject:identifier forKey:@"id"];

            [self.messageeListArray addObject:oneDic];

        }

    }

    #pragma mark 获取到标签对应的数据

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

        // 剔除获取的文本中空格和换行

        string = [string stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];

        NSMutableDictionary *dict = [self.messageeListArray lastObject];

        

        // 判断from标签

        if ([_fromTagFlag isEqualToString:@"from"] && dict) {

            [dict setObject:string forKey:@"from"];

        }

        // 判断CDate标签

        if ([_fromTagFlag isEqualToString:@"CDate"] && dict) {

            [dict setObject:string forKey:@"CDate"];

        }

        // 判断Content标签

        if ([_fromTagFlag isEqualToString:@"Content"] && dict) {

            [dict setObject:string forKey:@"Content"];

        }

    }

    #pragma mark - 解析标签结束

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

        self.fromTagFlag = nil;

    }

    #pragma mark 文档结束读取

    - (void)parserDidEndDocument:(NSXMLParser *)parser {

        // 打印获取到的数据的数组

        NSLog(@"%@", self.messageeListArray);

    }

    #pragma mark - 重写----dealloc方法

    - (void)dealloc {

        [_messageeListArray release], _messageeListArray = nil;

        [_fromTagFlag release], _fromTagFlag = nil;

        

        // 调用父类的dealloc方法

        [super dealloc];

    }

    @end

     
     
    // 第二种xml样式解析的代码
    // 头文件

    #import

    @interface RootViewController : UIViewController<</span>NSXMLParserDelegate>

    #pragma mark - 声明--属性

    @property (nonatomic, retain) NSMutableArray *messageeListArray; // 数据存储的地方

    @property (nonatomic, retain) NSString *fromTagFlag; // 开始标签

    @end

     
    // 实现文件

    #import "RootViewController.h"

    @interface RootViewController ()

    @end

    @implementation RootViewController

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil

    {

        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];

        if (self) {

            // Custom initialization

        }

        return self;

    }

    - (void)viewDidLoad

    {

        [super viewDidLoad];

        

       

        // 准备网址的字符串数据

        NSString *urlString =@"http://flash.weather.com.cn/wmaps/xml/beijing.xml";

        // 把字符串类型的网址转为NSURL类型

        NSURL *url1 = [[NSURL alloc] initWithString:urlString];

        // 使用url实例化网络请求实例

        NSURLRequest *request = [NSURLRequest requestWithURL:url1];

        // 同步读取到网络上的数据

        NSData *urlData = [NSURLConnection sendSynchronousRequest:requestreturningResponse:nil error:nil];

        

        

        // 实例化一个具体的解析类对象

        NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:urlData];

        // 设置该解析类对象的代理

        xmlParser.delegate = self;

        // 调用方法开始解析xml文件

        [xmlParser parse];

        

    }

    #pragma mark - NSXMLParser Delegate -

    #pragma mark 文档开始读取

    - (void)parserDidStartDocument:(NSXMLParser *)parser {

        // 实例化存储数据的数组

        self.messageeListArray = [NSMutableArray array];

    }

    #pragma mark 解析标签开始

    - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {

        // 首先用属性fromTagFlag获取ElementName,供后面使用

        self.fromTagFlag = elementName;

        // 因为数据都是存储在属性中的,全都存储在了attributeDict里面了,在这里直接打印下

        NSLog(@"%@", attributeDict);

    }

    #pragma mark 获取到标签对应的数据

    - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {

      // 因为数据都存储在了属性中,所有不需要解析子标签

    }

    #pragma mark - 解析标签结束

    - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {

        self.fromTagFlag = nil;

    }

    #pragma mark 文档结束读取

    - (void)parserDidEndDocument:(NSXMLParser *)parser {

        // 打印获取到的数据的数组

        NSLog(@"%@", self.messageeListArray);

    }

    #pragma mark - 重写----dealloc方法

    - (void)dealloc {

        [_messageeListArray release], _messageeListArray = nil;

        [_fromTagFlag release], _fromTagFlag = nil;

        

        // 调用父类的dealloc方法

        [super dealloc];

    }

    @end

  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/lixiong-iOS/p/5207285.html
Copyright © 2011-2022 走看看