1.XML文件

<Data>

<Movie id="1">

<title>good lucky to you</title>

<box>111</box>

<summary>This is a story</summary>

</Movie>

<Movie id="2">

<title>hello</title>

<box>99</box>

<summary>oh,yes</summary>

</Movie>

<Movie id="3">

<title>Cold</title>

<box>100</box>

<summary>I love cold weather</summary>

</Movie>

</Data>

2,解析

#import "ViewController.h"

//创建模型类

@interface DataModel : NSObject

//Data

@property(nonatomic,copy)NSNumber *id;

@property (nonatomic,copy)NSString*title;

@property (nonatomic,copy)NSString*box;

@property (nonatomic,copy)NSString*summary;

-(instancetype)initWithDict:(NSDictionary*)dict;

+(instancetype)dataWithdict:(NSDictionary*)dict;

@end

@implementation DataModel

-(instancetype)initWithDict:(NSDictionary*)dict

{

if (self=[super init]) {

[self setValuesForKeysWithDictionary:dict];

}

return self;

}

+(instancetype)dataWithdict:(NSDictionary*)dict

{

return [[self alloc]initWithDict:dict];

}

@end

@interface ViewController ()<NSXMLParserDelegate>

@property(nonatomic,strong)NSMutableArray*models;

//主要用于XML标签体中的文本的读取,很多时候标签体内的内容不是一次读取出来的,需要拼接字符串

@property(nonatomic,copy)NSMutableString*str;

@property(nonatomic,strong)DataModel*datamodel;

@end

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

[self loadDataWithUrl:@"http://127.0.0.1/struts.xml"];

}

//XML解析方法

-(void)loadDataWithUrl:(NSString*)str

{

NSURL *url=[NSURL URLWithString:str];

NSURLRequest *quest=[NSURLRequest requestWithURL:url cachePolicy:1 timeoutInterval:15];

[NSURLConnection sendAsynchronousRequest:quest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {

if (!connectionError)

{

NSHTTPURLResponse *resnse=(NSHTTPURLResponse*)response;

if (resnse.statusCode==200) {

NSXMLParser *parser=[[NSXMLParser alloc]initWithData:data];

parser.delegate=self;

//开始解析

[parser parse];

}

}

else

{

NSLog(@"请求出错:%@",connectionError);

}

}];

}

#pragma mark NSXMLParserDelegate XML文档解析五部曲

//开始解析

-(void)parserDidStartDocument:(NSXMLParser *)parser

{

NSLog(@"开始解析!!清除之前的数据");

[self.models removeAllObjects];

}

//开始查找标签元素

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

{

//elementName 记录标签的名称  attributeDict:记录标签的属

NSLog(@"开始查找标签元素:%@",elementName);

//NSLog(@"elementName:%@,namespaceURI:%@,qName:%@",elementName,namespaceURI,qName);

//排除根节点

self.str=nil;

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

//self.str=nil;

self.datamodel=[DataModel new];

[self.models addObject:self.datamodel];

[attributeDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

[self.datamodel setValue:obj forKey:key];

}];

}

}

//查找标签间的内容  可能不止执行一次

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

{

//NSLog(@"标签之间的内容!!!");

[self.str appendString:string];

}

//标签查找结束

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

{

//NSLog(@"标签结束:%@   ,%@",elementName,self.str);

if (![elementName isEqualToString:@"Data"]&&![elementName isEqualToString:@"Movie"]) {

[self.datamodel setValue:self.str forKey:elementName];

}

}

//解析结束

-(void)parserDidEndDocument:(NSXMLParser *)parser

{

NSLog(@"解析结束!!");

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

}

//解析出错

-(void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError

{

NSLog(@"解析出错!!!!!!!!%@",parseError);

}

//懒加载

-(NSMutableString*)str

{

if (!_str) {

_str=[NSMutableString new];

}

return _str;

}

-(NSMutableArray*)models

{

if (!_models) {

_models=[NSMutableArray new];

}

return _models;

}

@end

XML 文件解析的更多相关文章

  1. 通过正则表达式实现简单xml文件解析

    这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...

  2. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  3. android基础知识13:AndroidManifest.xml文件解析

    注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...

  4. Android之AndroidManifest.xml文件解析

    转自:Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文 ...

  5. 9.XML文件解析

    一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...

  6. Python实现XML文件解析

    1. XML简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用.它是web ...

  7. Python3将xml文件解析为Python对象

    一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...

  8. XML文件解析-DOM4J方式和SAX方式

    最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...

  9. java基础之概谈xml文件解析

    XML已经成为一种非常通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. 诸多web应用框架,其可配置的编程方式,给我们的开发带来了非常大程度的便捷,但细细 ...

  10. XML文件解析之JDOM解析

    1.JDOM介绍 JDOM的官方网站是http://www.jdom.org/,JDOM解析用到的jar包可以在http://www.jdom.org/dist/binary/中下载,最新的JDOM2 ...

随机推荐

  1. Python之socket简介

    http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx http://yangrong.blog.51cto.com/6945369/ ...

  2. git diff获取差异文件中文乱码的解决办法

    通过git的diff命令对两个commit id的版本进行差异化的对比.中文文件时出现乱码. git diff 6bded8d0c1fe1746c122121217dc0c88667091089 a9 ...

  3. 7.django之自定义分页记录

    只是大概记录下步骤: 1.表结构: class UserProfile(models.Model): ''' 用户表 ''' user = models.OneToOneField(User,verb ...

  4. Effective C++ -----条款24:若所有参数皆需类型转换,请为此采用non-member函数

    如果你需要为某个函数的所有参数(包括被this指针所指的那个隐喻参数)进行类型转换,那么这个函数必须是个non-member.

  5. ASM:《X86汇编语言-从实模式到保护模式》第14章:保护模式下的特权保护和任务概述

    ★PART1:32位保护模式下任务的隔离和特权级保护  这一章是全书的重点之一,这一张必须要理解特权级(包括CPL,RPL和DPL的含义)是什么,调用门的使用,还有LDT和TSS的工作原理(15章着重 ...

  6. 【python】lxml

    来源:http://lxml.de/tutorial.html lxml是python中处理xml的一个非常强大的库,可以非常方便的解析和生成xml文件.下面的内容翻译了链接中的一部分 1.生成空xm ...

  7. ios手势

    iOS 手势操作:拖动.捏合.旋转.点按.长按.轻扫.自定义 大 中 小   1.UIGestureRecognizer 介绍 手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性. i ...

  8. mongoose学习笔记1--基础知识1

    今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...

  9. ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言

    前端时间听一个技术朋友说 LayIM 2.0 发布了,听到这个消息抓紧去官网看了一下.(http://layim.layui.com/)哎呀呀,还要购买授权[大家支持一下哦],果断买了企业版,喜欢钻研 ...

  10. Linux定时任务设定

    使用crontab 命令进行设定. 详情可参见:http://blog.csdn.net/xiyuan1999/article/details/8160977. 共有6项构成,前5项为时间:分 时 天 ...