iOS的XML解析

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

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

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

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

// 头文件

#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 [email protected]"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

时间: 2024-08-23 21:52:17

iOS的XML解析的相关文章

IOS之XML解析

IOS之XML解析 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> <root> <systemConfig> <CityName>北京</CityName> <CityCode>201</CityCode> <ParentCityCode> 0</ParentCityCode> <areaCode>

[iOS] XML解析和xml转plist文件(GDataXML)

iOS对于XML的解析有系统自带的SDK--NSXMLParser,鄙人愚拙,只会用GDataXML进行解析,这里仅介绍GData的使用.(以下图为例) 1.对于一个xml文件,先读取出来 NSData *xmlData = [[NSFileManager defaultManager]contentsAtPath:[NSString stringWithFormat:@"%@/%@",[[NSBundle mainBundle] resourcePath],@"test.x

IOS JSON/XML解析

<pre name="code" class="objc">/*---------------------------XML_SAX解析-------------------------------*/ //XML SAX解析 - (IBAction)XML_SAX:(id)sender { NSData *da = [[NSData alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathFor

iOS开发XML解析

xml解析主要可以使用CData,libxml2以及NSXMLParser,以下对各个方法给出了相应的例子: 1.CDataXML: 1.1.创建FKBook类 #import <Foundation/Foundation.h> @interface FKBook : NSObject @property (nonatomic , assign) NSInteger bookID; @property (nonatomic , copy) NSString *title; @property

iOS 关于xml解析的问题

在ios开发中,尽管目前使用的主流数据格式是json,但有时也会碰到xml数据格式,我们还是要硬着头皮去解析,也有很多第三方库比如AFNetWorking 也可以拿来解析xml,但是由于会要用到几个回调方法,本人自己感觉不是很方便,有些麻烦,所以用到了另一个第三方类:GDataXMLNode.h/m 下面简单介绍下如何使用GDataXMLNode第三方类 1.首先去网上下载这个第三方类,加入到你工程里面.如图所示 2.target-->Build settings-->Header Searc

iOS开发之网络数据解析(二)--XML解析简介

前言:本篇随笔介绍的是XML解析. 正文: 1.XML解析方式有2两种: DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件 SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件 2.IOS中XML解析方案有很多种: 2-1.第三方框架: libxml2:纯C语言,默认包含在iOS SDK中,同时支持DOM和SAX解析 GDataXML:DOM方式解析,由Google开发,基于libxml2 2-2.苹果原生 NSXMLParser:SAX方式解析,使用简单

iOS 网络数据之XML解析

<pre name="code" class="objc"><span style="font-family:Arial, Helvetica, sans-serif;"><span style="font-size:14px;"><span style="background-color: rgb(255, 255, 255);"></span>

基于sax的xml解析 含源码 各种工具类(一)

1. 服务器端很简单直接在上次的服务器端代码上的Webcontent添加itcast.xml(在网上找的一个xml) 2.客户端搭建,主要流程如下 非主线程(Thread):使用HttpURLConnection请求服务器端的xml文件流数据,返回后,使用自定义的sax解析该流数据(xml). 主线程: handler中,更新自定义adapter,最后刷新listView. 首先该xml很简单,有三个标识,id,name,age 使用一个简单的Bean进行封装. 代码如下: public cla

iOS xml解析

iOS xml 解析方法有两种:SAX , DOM. SAX 不用借助第三方,在解析过程中逐行解析.(NSXMLParser,需要实现代理),具体步骤: 1.获取文件路径. 2.创建 NSXMLParser 对象. 3.遵守协议,设置代理. 4.实现代理方法 1>- (void)parserDidStartDocument:  ---- 开始解析 2>- (void)parserDidEndDocument: ----解析结束 3>- (void)parser:didStartEleme