- 浏览: 534096 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
iphone开发 NSXMLParser解析xml文件
xml文件如下:Question.xml,放在Resource文件目录中
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Question>
<QuestionTitle>你的学习成绩如何?</QuestionTitle>
<Answers>
<Answer>
<Result>主要科目成绩较好</Result>
<Evaluate>对自己的学习成绩一定要如实回答。</Evaluate>
</Answer>
<Answer>
<Result>大概可在中等偏上水平</Result>
<Evaluate>如果成绩不好则应说明理由。</Evaluate>
</Answer>
<Answer>
<Result>成绩特好,在我们班老数第一</Result>
<Evaluate>应表现出对学习的态度是认真的。</Evaluate>
</Answer>
</Answers>
</Question>
</Root>
IVPaserXMLSingleton.h 文件如下
#import <Foundation/Foundation.h>
#import "IVQuestionModel.h"
#import "IVAnswerModel.h"
@interface IVPaserXMLSingleton : NSObject {
NSXMLParser*m_parser; //xml 解析类
IVQuestionModel* m_queModel; //问题的封装类
IVAnswerModel* m_ansModel; //问题答案的封装类
NSMutableArray* m_arrXMLNode; //xml解析后的封装的array列表
}
//实现单利方法
+(IVPaserXMLSingleton *) GetInstance;
//解析xml文件 并将解析后的结果封装到列表中返回
- (NSMutableArray*) GetArrayByPaserXML;
@end
IVPaserXMLSingleton.m 文件如下,为单例类
@implementation IVPaserXMLSingleton
static IVPaserXMLSingleton *instance; //单例对象
BOOL flag = YES; //是否为一个节点 重复的赋值
NSString* m_strCurrentElement; //读到的当前节点的名
+ (IVPaserXMLSingleton *)GetInstance {
@synchronized(self) {
if (instance == nil) {
instance = [[self alloc] init];
}
}
return instance;
}
- (NSMutableArray*) GetArrayByPaserXML {
//获取xml文件
NSString* path = path = [[NSBundle mainBundle] pathForResource:@"Question" ofType:@"xml"];
NSFileHandle* file = [NSFileHandle fileHandleForReadingAtPath:path];
NSData* data = [file readDataToEndOfFile];
[file closeFile];
m_parser = [[NSXMLParser alloc] initWithData:data];
//设置该类本身为代理类
[m_parser setDelegate:self];
BOOL flag = [m_parser parse];
if (flag) {
NSLog(@"获取指定路径的xml文件成功");
} else {
NSLog(@"获取指定路径的xml文件失败");
}
[m_parser release];
return m_arrXMLNode;
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *) namespaceURI qualifiedName:(NSString *)qName
attributes: (NSDictionary *)attributeDict {
//读到开始标签 flag = YES
flag = YES;
// 纪录当前解析的节点
m_strCurrentElement = elementName;
////读到xml的跟结点的开始标签
if ([elementName isEqualToString:@"Root"]) {
m_arrXMLNode = [[NSMutableArray alloc] init];
}
//解析面试问题的xml文件
if ([m_xmlType isEqualToString:@"Question"]) {
if ([elementName isEqualToString:@"Question"]) {
m_queModel = [[IVQuestionModel alloc] init];
m_queModel.m_arrAnswers = [[NSMutableArray alloc] init];
} else if ([elementName isEqualToString:@"Answer"]) {
m_ansModel = [[IVAnswerModel alloc] init];
}
}
}
-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
if (flag) {
//解析面试问题的xml文件
if ([m_xmlType isEqualToString:@"Question"]) {
if ([m_strCurrentElement isEqualToString:@"QuestionTitle"]) {
m_queModel.m_strQuestionTitle = string;
} else if ([m_strCurrentElement isEqualToString:@"Result"]) {
m_ansModel.m_strResult = string;
} else if ([m_strCurrentElement isEqualToString:@"Evaluate"]) {
m_ansModel.m_strEvaluate = string;
}
}
}
}
-(void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
//读到结束标签 flag = NO
flag = NO;
//解析面试问题的xml文件
if ([m_xmlType isEqualToString:@"Question"]) {
if ([elementName isEqualToString:@"Question"]) {
[m_arrXMLNode addObject:m_queModel];
[[m_queModel m_arrAnswers] release];
[m_queModel release];
m_queModel = nil;
}
if ([elementName isEqualToString:@"Answer"]) {
[[m_queModel m_arrAnswers] addObject:m_ansModel];
[m_ansModel release];
m_ansModel = nil;
}
}
}
- (void)parserDidStartDocument:(NSXMLParser *)parser {
NSLog(@"开始解析xml文件");
}
- (void)parserDidEndDocument:(NSXMLParser *)parser {
NSLog(@"解析xml文件完成");
}
@end
大致过程就是这样,常遇到的问题:
1。如果xml文件读取失败,可能是xml的文件格式不正确,可以在window下用ie打开该xml文件可以快速的查看是否xml文件的格式有问题。
2。如果节点的值过长,如<Result>...</Result>中间有很长一段内容,那么解析的过程中会将这段内容截成几段来读取,即:-(void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string方法会被重复的调用,直到所有的内容读取结束,所以这时如果用:m_ansModel.m_strResult = string;这种方式赋值,得到就会是不全的内容,解决办法是用NSMutableString类型的去接收读到的值,大概像这样:
if (m_ansModel.m_strResult == nil) {
m_ansModel.m_strResult = [[NSMutableString alloc] initWithString:string];
} else {
[m_ansModel.m_strResult appendString:string];
}
其中m_strResult为NSMutableString类型。就ok啦。
发表评论
-
IOS5 ARC unsafe_unretained,strong,weak,__autoreleasing
2013-01-27 21:46 0iOS5中加入了新知识,就是ARC,其实我并不是很喜欢它, ... -
ios资源概述
2012-12-18 16:07 1160http://developer.apple.com/libr ... -
iphone开发NSString字符串常用方法
2012-12-18 10:17 3099//一、 NSString ... -
Objective-C消息机制的原理(转)
2012-12-13 17:37 1005转自:http://my.oschina.net/ ... -
Transitioning to ARC Release[迁移到ARC机制来实现内存管理:官方文档]
2012-11-25 18:41 956见链接: https://developer.apple.c ... -
OC 内存管理实战
2012-09-06 12:43 0注意点: 1:在init函数[包括其拓展] 以及 dea ... -
OC 内存管理实战
2012-09-06 12:43 1087注意点: 在init函数[包括其拓展] 以及 dealloc ... -
IOS 格式化输出
2012-09-05 12:49 01: NSString 类型(字符串) %@ ... -
详解iOS平台XML解析类库对比和安装说明
2012-09-04 17:57 1099详解iOS 平台XML 解 ... -
OC 常用数据类型之间的转换
2012-09-05 12:22 178661: NSString <==> NSInteg ... -
重要的知识点整理
2012-11-25 18:43 12471:id是隐式指针,所以不需要* 2: Dynamical ...
相关推荐
使用NSXMLParser解析XML数据的一个Demo
代码例子(关于NSXMLParser 解析xml文件) xml 文件 通过NSXMLParser 解析成为数组 元素内容与属性可以获取到
ios xml解析 NSXMLParser。 NSXMLParser是基于SAX的解析方式。NSXMLParser采用了委托设计模式,因此他的实现类需要采用协议并支持委托。NSXMLParser解析XML需要委托NSXMLParserDelegate实现。
Reachability 2.0版本,确认网络环境3G/WIFI 使用NSConnection下载数据 使用NSXMLParser解析xml文件
NULL 博文链接:https://eric-gao.iteye.com/blog/1590902
本程序演示了如何连接浏览器,如何获取数据并解析xml文件。
xml解析的两种常用方式, DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件,例如:GDataXml解析 ...SAX解析:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件,例如:NSXMLParser解析
xmlparsing-with-nsxmlparser-tutorial 你可以找到的NSXMLParser完整XMLParsing -教程这里 。 本教程由最好的The App Guruz提供。
在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML、TouchXML、KissXML、TinyXML和GDataXML。问题是应该选择哪一个呢? 解析 XML 通常有两...
DOM:一次性将整个XML数据加载进内存进行解析,比较适合解析小文件SAX:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件 2、IOS中XML解析方案有很多种: 2-1、第三方框架: libxml2:纯C语言...
使用iphoneSDK官方NSXMLParserDelegate做的简单xml解析,附带详细注释以及使用到的方法的详细解释,灰常适合新手,高手请留下你们的改进意见。
通过SOAP 网络请求数据,并使用NSXMLParser解析Xml
SHXMLParser 是一个基于 NSXMLParser 构建的易用的 XML 解析器,可转换 XML 数据到 Objective-C 对象。 标签:SHXMLParser
主要介绍了使用Swift实现iOS App中解析XML格式数据的教程,讲到了iOS中提供的NSXMLParser和NSXMLParserDelegate两个API的用法,需要的朋友可以参考下
用于NSXMLParser的ReactiveCocoa扩展:一种简洁的,基于流的API,用于使用NSXMLParser解析XML。 围绕定义包装器,从而不再需要实现繁琐的委托方法。 应用所需的任何ReactiveCocoa魔术(请参阅 ): # import " ...
一个简单的小例子,通过一个xml文件去实现选择省市区。 关键是用了XML解析器的代理方法。具体相关代码如下: #pragma mark - xmlParseDelegateMethod -(void)parser:(NSXMLParser *)parser didStartElement:...
在 web开发方面,分别介绍了三个 iphone web库,即 webkit、iui和 canvas,并讨论了 web开发环境 dashcode,最后阐述 web应用程序的调试。在 sdk开发方面,详细描述其各种组件和功能,包括 xcode、interface builder...
在Swift中实现的简单XML解析器这是什么? 这是一个受SwiftyJSON和SWXMLHash启发的XML解析器。 Foundation框架中的NSXMLParser是一种“ SAX”解析器。 它具有足够的性能,但是在Swift中实现了一点inc Simple XML ...
NSXMLParser *xmlRead = [[NSXMLParser alloc] initWithData:xmlData]; [xmlRead setDelegate:self]; [xmlRead parse]; [xmlRead release]; //get dataTemplate for (int i=0;i<[objects count]; i++) { ...
概述基于Swift的RSS阅读器,可将rss feed作为xml从远程服务器加载,并使用NSXMLParser对其进行解析。 解析完成后,它将数据加载到UITableView即显示标题和日期。 当单击标题时,它将转到详细信息页面,在该页面中,...