XML 文件解析
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 文件解析的更多相关文章
- 通过正则表达式实现简单xml文件解析
这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...
- 八、Android学习第七天——XML文件解析方法(转)
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...
- android基础知识13:AndroidManifest.xml文件解析
注:本文转载于:http://blog.csdn.net/xianming01/article/details/7526987 AndroidManifest.xml文件解析. 1.重要性 Andro ...
- Android之AndroidManifest.xml文件解析
转自:Android学习笔记之AndroidManifest.xml文件解析 一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文 ...
- 9.XML文件解析
一.XML简介 XML(EXtensible Markup Language),可扩展标记语言 特点:XML与操作系统.编程语言的开发平台无关 实现不同系统之间的数据交换 作用:数据交互 配置应用程序 ...
- Python实现XML文件解析
1. XML简介 XML(eXtensible Markup Language)指可扩展标记语言,被设计用来传输和存储数据,已经日趋成为当前许多新生技术的核心,在不同的领域都有着不同的应用.它是web ...
- Python3将xml文件解析为Python对象
一.说明 从最开始写javascript开始,我就很烦感使用getElementById()等函数来获取节点的方法,获取了一个节点要访问其子孙节点要么child半天要么就再来一个getElementB ...
- XML文件解析-DOM4J方式和SAX方式
最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml ...
- java基础之概谈xml文件解析
XML已经成为一种非常通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便. 诸多web应用框架,其可配置的编程方式,给我们的开发带来了非常大程度的便捷,但细细 ...
- XML文件解析之JDOM解析
1.JDOM介绍 JDOM的官方网站是http://www.jdom.org/,JDOM解析用到的jar包可以在http://www.jdom.org/dist/binary/中下载,最新的JDOM2 ...
随机推荐
- Kendo UI
http://www.cnblogs.com/libingql/category/585455.html http://www.scala-china.net/discuz/forum.php?mod ...
- oracle用户创建及权限设置及表空间
建立表空间: create tablespace portx_data datafile 'D:\oracle_data\portx.dbf' size 50m autoextend on next ...
- SpringMVC中Controller跳转到另一个Controller方法
1.直接Redirect后加 Controller/Action Response.Redirect("/User/Edit"); return Redirect("/U ...
- ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)
做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...
- ACM/ICPC 之 BFS-广搜进阶-八数码(经典)(POJ1077+HDU1043)
八数码问题也称为九宫问题.(本想查查历史,结果发现居然没有词条= =,所谓的历史也就不了了之了) 在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同.棋盘上还有一个 ...
- MPlayer-2016-bin-noConsole
运行 Install-RMenu.cmd 添加右键播放功能 ; 往前0.05秒 大概10多个帧 ' 往后0.05秒 大概10多个帧 鼠标右键 快速定位 鼠标中键 退出 F1 缩小 F2 原始大小 F3 ...
- Python 开发轻量级爬虫01
Python 开发轻量级爬虫 (imooc总结01--课程目标) 课程目标:掌握开发轻量级爬虫 为什么说是轻量级的呢?因为一个复杂的爬虫需要考虑的问题场景非常多,比如有些网页需要用户登录了以后才能够访 ...
- Effective C++ -----条款27:尽量少做转型动作
如果可以,尽量避免转型,特别是在注重效率的代码中避免dynamic_casts.如果有个设计需要转型动作,试着发展无需转型的替代设计. 如果转型是必要的,试着将它隐藏于某个函数背后.客户随后可以调用该 ...
- 针对Xcode的警告忽略消除处理
一.问题描述 html代码如下 <html> <head> <meta charset="utf-8"/> <title>我的网页& ...
- mybatis 获取自增ID
在Mybatis Mapper文件中添加属性“useGeneratedKeys”和“keyProperty”,其中keyProperty是Java对象的属性名,而不是表格的字段名. <inser ...