`
xyz_lmn
  • 浏览: 65353 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

iOS学习笔记(九)——xml数据解析

 
阅读更多

在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 下载

/**
* @author 张兴业
* iOS入门群:83702688
* android开发进阶群:241395671
* 我的新浪微博:@张兴业TBOW
*/

参考:

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解析.zip

    IOS应用源码——XML解析.rar

    此压缩包"IOS应用源码——XML解析.rar"包含的源码示例,很可能是用于演示如何在iOS应用中解析XML数据。在本文中,我们将深入探讨iOS中的XML解析技术,并通过相关知识点的详细讲解,帮助你理解和掌握这一技能。 首先...

    IOS应用源码——xmlparser.rar

    总之,通过“IOS应用源码——xmlparser.rar”,你可以学习到如何在iOS应用中使用XMLParser来解析XML文档,这对于任何需要处理结构化数据的开发者都是一项重要的技能。通过实践这个示例,你可以更好地掌握XML数据解析...

    IOS应用源码——对xml文件的解析与导出数据存储在xml中(代码)xmlparser.zip

    这个“IOS应用源码——对xml文件的解析与导出数据存储在xml中(代码)xmlparser.zip”包含了一段实现XML解析和数据存储功能的源代码。以下是对这个主题的详细讲解: 1. XML基本概念: XML是一种标记语言,它允许...

    iOSXML数据解析

    总结起来,iOS中XMLReader是一种高效的XML解析工具,适用于处理大型XML数据。通过遵循XMLReaderDelegate协议,我们可以实现自定义的解析逻辑,有效地解析和处理SOAP请求返回的XML数据。在实际项目中,根据需求对XML...

    ios 简单xml解析DEMO绝对可用

    本教程将介绍如何在iOS应用中实现简单的XML解析,并提供了一个名为"UITableViewTricks"的DEMO,供开发者们参考学习。 XML文件结构清晰,易于理解,但在iOS中解析XML数据并非内置功能,需要借助第三方库或者Apple...

    ios应用源码之对xml文件的解析与导出数据存储在xml中(代码)xmlparser 2018127

    本篇文章将深入探讨如何在iOS应用中解析XML文件并导出数据,同时将这些数据存储回XML。我们将基于提供的源码"xmlparser"进行分析。 1. XML基础 XML是一种自解释的、可扩展的标记语言,其设计目的是传输和存储数据,...

    ios中xml解析demo

    本Demo主要展示了如何在iOS平台上对XML数据进行解析。 iOS中的XML解析主要有以下几种方法: 1. **NSXMLParser**: NSXMLParser是Apple提供的一个基于事件驱动的XML解析器。它逐行读取XML文档,遇到每个元素、属性...

    IOS解析XML文件

    在iOS开发中,解析XML文件是一项常见的任务,特别是在与服务器进行数据交互时。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的结构性和可读性,使得它成为网络数据传输的常用格式。本篇...

    iOS组件与框架——iOS SDK高级特性剖析 源代码

    此资源提供的"源代码"涵盖了以上各个组件和框架的示例,开发者可以通过阅读和运行这些代码,深入学习如何有效利用iOS SDK的高级特性。例如,你可以看到如何使用Core Data进行数据持久化,如何利用Core Animation创建...

    iOS xml解析和json解析demo

    总结一下,这个"iOS xml解析和json解析demo"将涵盖如何在iOS应用中解析XML数据,包括使用NSXMLParser和XMLParser,以及如何解析和序列化JSON数据,包括使用内置的JSONSerialization类和可能涉及的一些第三方库。...

    iOS实例开发源码——JTStackController for iOS.zip

    【描述】"iOS实例开发源码——JTStackController for iOS.zip" 提示我们这是一个实际操作的例子,旨在帮助开发者理解和学习如何在iOS项目中集成和使用JTStackController。通过这个源代码,开发者可以深入研究...

    【IOS开发】GDataXML解析XML

    这篇博客文章可能详细介绍了如何在iOS应用中使用GDataXML库来解析XML数据。 GDataXML库基于libxml2,这是一个强大的XML解析库,被广泛用于各种平台。GDataXMLNode是这个库的核心类,它代表了XML文档中的任意节点,...

    iOS开发网络篇之Web Service和XML数据解析

    在iPhone和后台系统的通信中,使用Web Service...该类的特点上将XML数据解析成数据库记录形式,数据解析后保存在NSArray中, 其中数组的每个元素对应一条数据库记录,每条记录则是由数据库字段和值组成的NSDictionary。

    iOS实例开发源码——KKGridView for iOS.zip

    总结,"iOS实例开发源码——KKGridView for iOS.zip" 是一个用于iOS开发的源代码包,重点学习内容包括KKGridView控件的原理、使用方法以及源码分析。通过这个项目,开发者可以提升iOS UI设计和自定义视图开发的能力...

    iOS实例开发源码——JPButton for iOS.zip

    【标题】"iOS实例开发源码——JPButton for iOS.zip" 涉及的主要知识点是iOS应用开发中的自定义控件设计,特别是针对UIButton的扩展和优化。在iOS开发中,自定义控件通常用于实现特定的设计需求或者增强用户体验。...

    ios_XML_解析

    iOS xml 解析 本来是喜欢用json的,可服务端的那位大神居然搞不出来 他说他是直接返回一串字符串的,是底层给疯装成xml返回的 嗨,累 网上搜了下,有说用sdk自带的NSXMLParse, 有说用google提供的GDataXML, 还有...

    IOS源码应用Demo-XML解析.zip

    本资源包“IOS源码应用Demo-XML解析.zip”提供了两年前的一个iOS应用源码示例,专为毕业设计学习而准备。通过这个项目,我们可以深入探讨iOS中的XML解析技术及其在实际应用中的实现。 XML(eXtensible Markup ...

    IOS应用源码之对xml文件的解析与导出数据存储在xml中(代码)xmlparser .zip

    本篇将详细讲解如何在iOS应用中对XML文件进行解析以及如何将数据导出并存储到XML文件中。 首先,让我们了解XML的基本结构。XML文档由元素(Element)、属性(Attribute)、文本内容(Text Content)等构成,元素是...

Global site tag (gtag.js) - Google Analytics