ios-使用NSXMLParser解析XML文件
来源:互联网 发布:用软件装系统 编辑:程序博客网 时间:2024/05/22 08:29
NSXML是ios SDK自带的,也是苹果默认的解析框架,它采用SAX模式解析,是SAX解析模式的代表。NSXML框架的核心是NSXMLParser和它的委托协议NSXMLParserDelegate。
1、例子Notes.xml:
<?xml version="1.0" encoding="UTF-8"?><Notes> <Note id="1"> <CDate>2012-12-21</CDate> <Content>iosBOOK_1</Content> <UserID>tony</UserID> </Note> <Note id="2"> <CDate>2012-12-22</CDate> <Content>iosBOOK_2</Content> <UserID>tony</UserID> </Note> <Note id="3"> <CDate>2012-12-23</CDate> <Content>iosBOOK_3</Content> <UserID>tony</UserID> </Note> <Note id="4"> <CDate>2012-12-24</CDate> <Content>iosBOOK_4</Content> <UserID>tony</UserID> </Note> <Note id="5"> <CDate>2012-12-25</CDate> <Content>iosBOOK_5</Content> <UserID>tony</UserID> </Note> <Note id="6"> <CDate>2012-12-26</CDate> <Content>iosBOOK_6</Content> <UserID>tony</UserID> </Note></Notes>
2、编写一个专门解析XML文件的类(NotesXMLParser):
- (void)start{ // 在整个程序包里面搜索Notes.xml NSString *path = [[NSBundle mainBundle] pathForResource:@"Notes" ofType:@"xml"]; NSURL *url = [NSURL fileURLWithPath:path]; NSXMLParser *m_Parser = [[[NSXMLParser alloc] initWithContentsOfURL:url] autorelease]; m_Parser.delegate = self; [m_Parser parse];}// 解析文档开始- (void)parserDidStartDocument:(NSXMLParser *)parser{ _notes = [[NSMutableArray alloc] init];}// 解析文档结束- (void)parserDidEndDocument:(NSXMLParser *)parser{ // 使用KVO模式,通知中心机制 [[NSNotificationCenter defaultCenter] postNotificationName:@"reloadXMLData" object:_notes userInfo:nil]; [_notes removeAllObjects]; _notes = nil;}// 解析开始标签- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict{ _curTagName = elementName; if ([_curTagName isEqualToString:@"Note"]) { NSString *_id = [attributeDict objectForKey:@"id"]; NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; [dict setObject:_id forKey:@"id"]; [_notes addObject:dict]; [dict release]; }}// 解析结束标签- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName{ _curTagName = nil;}// 解析字符串- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string{ string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; if ([string isEqualToString:@""]) return; NSMutableDictionary *dict = [_notes lastObject]; if ([_curTagName isEqualToString:@"CDate" ] && dict) { [dict setObject:string forKey:@"CDate"]; } else if ([_curTagName isEqualToString:@"Content"] && dict) { [dict setObject:string forKey:@"Content"]; } else if ([_curTagName isEqualToString:@"UserID"]) { [dict setObject:string forKey:@"UserID"]; }}#if M_COMPILE == DEBUG- (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError{ NSLog(@"解析错误:%@",parseError);}#endif
3、实际使用:
<pre name="code" class="cpp">- (void)initObserver{ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getXMLData:) name:@"reloadXMLData" object:nil]; // 开始解析xml文件 NotesXMLParser *parser = [[NotesXMLParser alloc] init]; [parser start]; [parser release];}- (void)getXMLData:(NSNotification *)notification{ NSMutableArray *xmlData = [notification object]; NSLog(@"xmlData:%@",xmlData);}
至此,NSXMLParser的介绍已经完毕,效果如下:
2014-08-30 11:14:27.671 test71[6436:60b] xmlData:( { CDate = "2012-12-21"; Content = "iosBOOK_1"; UserID = tony; id = 1; }, { CDate = "2012-12-22"; Content = "iosBOOK_2"; UserID = tony; id = 2; }, { CDate = "2012-12-23"; Content = "iosBOOK_3"; UserID = tony; id = 3; }, { CDate = "2012-12-24"; Content = "iosBOOK_4"; UserID = tony; id = 4; }, { CDate = "2012-12-25"; Content = "iosBOOK_5"; UserID = tony; id = 5; }, { CDate = "2012-12-26"; Content = "iosBOOK_6"; UserID = tony; id = 6; })
0 0
- ios-使用NSXMLParser解析XML文件
- 使用NSXMLParser解析xml文件
- 使用NSXMLParser解析xml文件
- iOS XML解析 - NSXMLParser
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- 【IOS中XML解析】NSXMLParser方法解析XML文件案例
- 【ios】通过NSXMLParser解析xml
- ios NSXmlparser方法 XML解析
- IOS内置NSXMLParser解析xml
- iOS-XML文档解析(NSXMLParser)
- iphone NSXMLParser解析xml文件
- IOS开发之—xml文件解析(NSXMLParser类)
- 使用NSXMLParser解析XML数据
- 使用NSXMLParser解析XML数据
- ios使用NSXMLParser类和 GDataXMLNode解析XML
- IOS用NSXMLParser实现XML解析
- C++中的system("pause");
- 【UVA】11437Triangle Fun(简单几何)
- 前端性能的测试与优化
- Android开发————Intent中的四个重要属性Action、Data、Category、Extras
- 一些要记住的话
- ios-使用NSXMLParser解析XML文件
- web前端优化工具
- 【欧拉函数】 HDOJ 4483 Lattice triangle
- asp.net mysql无法查询中文;You have an error in your SQL syntax; check the manual that corresponds to
- 相对布局 梅花布局效果
- CoreData版本迁移
- 正确理解线程和进程
- 动态规划 之 最长公共子序列(非连续)
- 17 activity详解002 关闭提示是否退出