在iPhone开发中,XML的解析有很多选择,iOS SDK提供了NSXMLParser和libxml2两个类库,另外还有很多第三方类库可选,例如TBXML、TouchXML、KissXML、TinyXML和GDataXML。这篇文章使用了NSXMLParser。
解析 XML 通常有两种方式,DOM 和 SAX:
- DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值。而且通常情况下,可以借助XPath,直接查询XML节点。
- SAX解析XML,是基于事件通知的模式,一边读取XML文档一边处理,不必等整个文档加载完之后才采取操作,当在读取解析过程中遇到需要处理的对象,会发出通知对其进行处理。
NSXMLParser是基于SAX的解析方式。NSXMLParser采用了委托设计模式,因此他的实现类需要采用协议并支持委托。NSXMLParser解析XML需要委托NSXMLParserDelegate实现。
1、初始化NSXMLParser
要使用NSXMLParser要先创建它,设置各种属性,主要用到以下几个方法:
initWithContentsOfURL 通过NSURL创建解析器
initWithData 通过NSData创建解析器
setDelegate 为解析器定义委托
parse 运行解析器
NSXMLParser *parser=[[NSXMLParser alloc] initWithData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
// NSXMLParser *parser=[[NSXMLParser alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://earthquake.usgs.gov/earthquakes/catalogs/7day-M2.5.xml"]];
[parser setDelegate:self];//设置NSXMLParser对象的解析方法代理
[parser setShouldProcessNamespaces:NO];
[parser parse];//开始解析
2、委托方法
主要使用一下委托方法:
//发现元素开始符的处理函数 (即报告元素的开始以及元素的属性)
- (void)parser:(NSXMLParser *)parser
didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
//处理标签包含内容字符 (报告元素的所有或部分内容)
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
//发现元素结束符的处理函数,保存元素各项目数据(即报告元素的结束标记)
- (void)parser:(NSXMLParser *)parser
didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName
//报告解析的结束
- (void)parserDidEndDocument:(NSXMLParser *)parser
//报告不可恢复的解析错误
- (void)paser:parserErrorOccured
执行[parser parse]后会依序执行:
1、didStartElement
2、foundCharacters
3、didEndElement
示例如下:
-(void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict {
NSLog(@"xml_parser start %@ ",elementName);
if ( [elementName isEqualToString:@"person"] ) {
NSLog(@"xml_parser person ");
if(personNameArrary==nil){
personNameArrary=[[NSMutableArray alloc] init];
}
}
if(itemValue!=nil){
itemValue=nil;
}
itemValue=[[NSMutableString alloc] init];
if ( [elementName isEqualToString:@"phone"] ) {
NSString *atr=[attributeDict valueForKey:@"type"];
NSLog(@"xml_parser phone type: %@",atr);
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
NSLog(@"xml_parser value:%@",string);
[itemValue appendString:string];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
NSLog(@"xml_parser end %@ ",elementName);
if ( [elementName isEqualToString:@"firstName"] ) {
[personNameArrary addObject:itemValue];
}
if ( [elementName isEqualToString:@"person"] ) {
NSLog(@"xml_parser person end");
}
}
NSXMLParser DEMO 下载
* iOS入门群:83702688
* android开发进阶群:241395671
*/
参考:
http://www.cnblogs.com/dotey/archive/2011/05/11/2042000.html
https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/XMLParsing/Articles/HandlingElements.html#//apple_ref/doc/uid/20002265-BCIJFGJI
http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project#
分享到:
相关推荐
IOS应用源码——XML解析.zip
此压缩包"IOS应用源码——XML解析.rar"包含的源码示例,很可能是用于演示如何在iOS应用中解析XML数据。在本文中,我们将深入探讨iOS中的XML解析技术,并通过相关知识点的详细讲解,帮助你理解和掌握这一技能。 首先...
总之,通过“IOS应用源码——xmlparser.rar”,你可以学习到如何在iOS应用中使用XMLParser来解析XML文档,这对于任何需要处理结构化数据的开发者都是一项重要的技能。通过实践这个示例,你可以更好地掌握XML数据解析...
这个“IOS应用源码——对xml文件的解析与导出数据存储在xml中(代码)xmlparser.zip”包含了一段实现XML解析和数据存储功能的源代码。以下是对这个主题的详细讲解: 1. XML基本概念: XML是一种标记语言,它允许...
总结起来,iOS中XMLReader是一种高效的XML解析工具,适用于处理大型XML数据。通过遵循XMLReaderDelegate协议,我们可以实现自定义的解析逻辑,有效地解析和处理SOAP请求返回的XML数据。在实际项目中,根据需求对XML...
本教程将介绍如何在iOS应用中实现简单的XML解析,并提供了一个名为"UITableViewTricks"的DEMO,供开发者们参考学习。 XML文件结构清晰,易于理解,但在iOS中解析XML数据并非内置功能,需要借助第三方库或者Apple...
本篇文章将深入探讨如何在iOS应用中解析XML文件并导出数据,同时将这些数据存储回XML。我们将基于提供的源码"xmlparser"进行分析。 1. XML基础 XML是一种自解释的、可扩展的标记语言,其设计目的是传输和存储数据,...
本Demo主要展示了如何在iOS平台上对XML数据进行解析。 iOS中的XML解析主要有以下几种方法: 1. **NSXMLParser**: NSXMLParser是Apple提供的一个基于事件驱动的XML解析器。它逐行读取XML文档,遇到每个元素、属性...
在iOS开发中,解析XML文件是一项常见的任务,特别是在与服务器进行数据交互时。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的结构性和可读性,使得它成为网络数据传输的常用格式。本篇...
此资源提供的"源代码"涵盖了以上各个组件和框架的示例,开发者可以通过阅读和运行这些代码,深入学习如何有效利用iOS SDK的高级特性。例如,你可以看到如何使用Core Data进行数据持久化,如何利用Core Animation创建...
总结一下,这个"iOS xml解析和json解析demo"将涵盖如何在iOS应用中解析XML数据,包括使用NSXMLParser和XMLParser,以及如何解析和序列化JSON数据,包括使用内置的JSONSerialization类和可能涉及的一些第三方库。...
【描述】"iOS实例开发源码——JTStackController for iOS.zip" 提示我们这是一个实际操作的例子,旨在帮助开发者理解和学习如何在iOS项目中集成和使用JTStackController。通过这个源代码,开发者可以深入研究...
这篇博客文章可能详细介绍了如何在iOS应用中使用GDataXML库来解析XML数据。 GDataXML库基于libxml2,这是一个强大的XML解析库,被广泛用于各种平台。GDataXMLNode是这个库的核心类,它代表了XML文档中的任意节点,...
在iPhone和后台系统的通信中,使用Web Service...该类的特点上将XML数据解析成数据库记录形式,数据解析后保存在NSArray中, 其中数组的每个元素对应一条数据库记录,每条记录则是由数据库字段和值组成的NSDictionary。
总结,"iOS实例开发源码——KKGridView for iOS.zip" 是一个用于iOS开发的源代码包,重点学习内容包括KKGridView控件的原理、使用方法以及源码分析。通过这个项目,开发者可以提升iOS UI设计和自定义视图开发的能力...
【标题】"iOS实例开发源码——JPButton for iOS.zip" 涉及的主要知识点是iOS应用开发中的自定义控件设计,特别是针对UIButton的扩展和优化。在iOS开发中,自定义控件通常用于实现特定的设计需求或者增强用户体验。...
iOS xml 解析 本来是喜欢用json的,可服务端的那位大神居然搞不出来 他说他是直接返回一串字符串的,是底层给疯装成xml返回的 嗨,累 网上搜了下,有说用sdk自带的NSXMLParse, 有说用google提供的GDataXML, 还有...
本资源包“IOS源码应用Demo-XML解析.zip”提供了两年前的一个iOS应用源码示例,专为毕业设计学习而准备。通过这个项目,我们可以深入探讨iOS中的XML解析技术及其在实际应用中的实现。 XML(eXtensible Markup ...
本篇将详细讲解如何在iOS应用中对XML文件进行解析以及如何将数据导出并存储到XML文件中。 首先,让我们了解XML的基本结构。XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等构成,元素是...