ios-使用NSXMLParser解析XML文件
2014-08-30 11:33
405 查看
NSXML是ios SDK自带的,也是苹果默认的解析框架,它采用SAX模式解析,是SAX解析模式的代表。NSXML框架的核心是NSXMLParser和它的委托协议NSXMLParserDelegate。
至此,NSXMLParser的介绍已经完毕,效果如下:
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; } )
相关文章推荐
- iOS_使用NSXMLParser解析本地XML文件
- iOS开发中 使用XML和JSON对本地文件进行解析
- iOS:使用第三方DOM解析XML文件
- Swift-使用NSXMLParser解析XML文件
- <转>iOS SDK中使用NSXMLParser解析XML
- 使用NSXMLParser解析xml文件
- iOS SDK中使用NSXMLParser解析XML
- swift:使用NSXMLParser解析本地xml文件(详细代码注释)
- 关于iOS解析XML使用NSXMLParser和GDataXML不得不说的一些事
- iOS 使用ASIHttpRequest和GData解析xml网络文件
- ios-使用TBXML解析XML文件
- iOS SDK中使用NSXMLParser解析XML
- iOS SDK中使用NSXMLParser解析XML
- 使用Dom4j创建与解析XML文件
- android 使用 pull 解析xml文件
- VC中使用CMarkup解析xml文件
- responseXML 属性 如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性: 请求 books.xml 文件,并解析响应:
- android_xml解析之 使用PULL读取XML文件 .
- perl 解析xml ,json文件及curl工具的使用
- 使用Pull解析器解析XML文件和写XML