IOS开发系列——xml文件解析

iOS开发解析XML格式数据 XML格式的数据是一种数据的传输格式,由于它方便编写,结构清晰,所以深受程序员的喜爱,很多人都喜欢使用XML格式传输数据或者作为程序的配置信息。现在我将来实现在iOS解析XML格式数据,语言使用Swift。      首先自己写一个简单的XML: zhangsan lisi wangwu many people 阅读详情
IOS开发系列——xml文件解析

一、概述
由于xml具有强大的扩展性及清晰的结构,使其广泛用于各种文件配置,比如皮肤配置;那么在IOS该如何解析xml文件呢?xml解析必然要用到xml解析库,有libxml、tinyxml等,但在IOS的API中提供了NSXMLParser类,通过NSXMLParser可以实现快速访问xml中相关字段;

二、NSXMLParser类几个重要知识点
1、要使用NSXMLParser类,必须遵循NSXMLParserDelegate协议,即在自身类声明时,必须加上<NSXMLParserDelegate>
2、必须设置代理,这样才能够访问自身重定义的方法,即才能处理xml中数据;
3、以下对NSXMLParserDelegate协议中几个常用的方法进行说明:

- (void)parserDidStartDocument:(NSXMLParser *)parser;
该方法将在开始parse之前调用,用处是可以在其中对相应的对象进行分配和初始化;

- (void)parserDidEndDocument:(NSXMLParser *)parser;
该方法将在parse结束后调用,用处是进行相应的资源释放和处理;

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict;
该方法将在parse期间碰到元素开始标志"<xxx"时调用,用于元素属性获取,其中elementName为元素名,attributeDict为相应的属性集合;

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName;
该方法是在遇到元素结束标志"</xxx>"调用;

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string;
该方法是遇到元素值时调用,通过它可以获取元素内容;

三、实例
千言万语也许也不如代码直观,现在就将用代码说话,假设要解析的xml文件如下:
/***************************************************************
**                                                       skin.xml                                                     **
***************************************************************/
<?xml version="1.0" encoding="utf-8"?>
<skin>
     <string name="title" id="1">学习xml解析</string>
     <string name="content" id="1">hello world</string>
</skin>

/*************************************************************************
**                                                          skin.h                                                        **
*************************************************************************/
#import <Foundation/Foundation.h>

@interface SKIN : NSObject <NSXMLParserDelegate>

    NSMutableArray *viewArray;//用于存放资源
    NSString *skinName;
}

-(BOOL)load:(NSString *)name;
-(void)unload;

@end


/***************************************************************
**                                                         skin.m                                                     **
***************************************************************/
#import "skin.h"

@implementation SKIN

-(BOOL)load:(NSString *)name
{
    //read file to buffer
    NSFileHandle *file = [NSFileHandle fileHandleForReadingAtPath:name];
    NSData *data = [file readDataToEndOfFile];
    [file closeFile];
    
    //create xml parser
    NSXMLParser *parser;
    parser = [[NSXMLParser alloc] initWithData:data];
    
    [parser setShouldProcessNamespaces:NO];
    [parser setShouldReportNamespacePrefixes:NO];
    [parser setShouldResolveExternalEntities:NO];
    [parser setDelegate:self];
    
    //start parse
    [parser parse];
              
    return  YES;
}

-(void)unload
{
}

- (void)parserDidStartDocument:(NSXMLParser *)parser
{
    //alloc
    NSLog(@"=======start parse=========");
    viewArray = [[NSMutableArray alloc] init];
}

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
    NSLog(@"=======end parse=========");
}

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict
{
    NSLog(@"=======start element:%@=========", elementName);
    if ([elementName isEqualToString:@"skin"]) {
        NSLog(@"skin name=%@", [attributeDict objectForKey:@"name"]);
    } else if ([elementName isEqualToString:@"string"]) {
        NSLog(@"string name= %@ id=%@", [attributeDict objectForKey:@"name"], [attributeDict objectForKey:@"id"]);
    }
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName

{
    NSLog(@"=======end element:%@=========", elementName);
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
    NSLog(@"=======element content=%@=====", string);
}

@end

/***************************************************************
**                                                         main.m                                                     **
***************************************************************/
#import <Foundation/Foundation.h>
#import "skin.h"

int main (int argc, const char * argv[])
{

    @autoreleasepool {
        SKIN *skin = [[SKIN alloc] init];
        [skin load:@"/Extra/skin_cn.xml"];
        [skin unload];
        
    }
    return 0;
}


执行结果:
2012-03-28 19:41:20.720 test[2321:707] =======start parse=========
2012-03-28 19:41:20.722 test[2321:707] =======start element:skin=========
2012-03-28 19:41:20.723 test[2321:707] skin name=(null)
2012-03-28 19:41:20.724 test[2321:707] =======element content=
     =====
2012-03-28 19:41:20.725 test[2321:707] =======start element:string=========
2012-03-28 19:41:20.726 test[2321:707] string name= title id=1
2012-03-28 19:41:20.728 test[2321:707] =======element content=学习xml解析=====
2012-03-28 19:41:20.729 test[2321:707] =======end element:string=========
2012-03-28 19:41:20.730 test[2321:707] =======element content=
     =====
2012-03-28 19:41:20.731 test[2321:707] =======start element:string=========
2012-03-28 19:41:20.732 test[2321:707] string name= content id=1
2012-03-28 19:41:20.733 test[2321:707] =======element content=hello world=====
2012-03-28 19:41:20.734 test[2321:707] =======end element:string=========
2012-03-28 19:41:20.735 test[2321:707] =======element content=
=====
2012-03-28 19:41:20.736 test[2321:707] =======end element:skin=========
2012-03-28 19:41:20.737 test[2321:707] =======end parse=========

四、总结
以上例子自是个引子,更多接口可以查看相关帮助;
Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘 本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。 阅读详情

相关推荐

最大面积验证码通用解法

最大面积验证码、面积验证通用解法

九月镇灵将的博客 1022

cordova iOS端 config.xml 文件配置 Localizations 本地化 等权限 Info.plist

背景: 刚开始未找到配置方法,需要手动再Xcode >>info >> custom ios target properties 添加配置,比较麻烦。 部分配置如下: <platform name="ios"> <edit-config file="*-Info.plist" mode="merge" target="CFB...

qingyuxx 1722

深入解析iOS应用中的XML文件处理

本章节深入探讨了iOS应用开发中如何处理XML文件,包括在项目资源中创建和命名XML文件,以及使用NSXMLParser类来解析XML文件内容。介绍了如何将XML文件内容加载到NSData实例中,并通过NSXMLParserDelegate协议定义的代理方法来启动解析过程。此外,还详细讨论了如何创建XML元素对象和XML文档对象,以及如何利用这些对象来构建一个对象模型,以方便地访问解析后的XML文件内容。

weixin_31659095的博客 540

NSXMLParser

1. 使用 NSXMLParser解析XML文档 NSXMLParser 是基于 SAX 的解析器,也就是所谓的“事件驱动”解析器,因此使用 NSXMLParser 解析的关键就是实现 SAX 的时间处理器 --该事件处理器负责处理 NSXMLParser 解析 XML 过程中的各种事件。 NSXMLParser 解析的事件处理采用了委托,因此只要为 NSXMLParser 指定一个 d...

depaoweng2915的博客 143

iOS 网络编程 (五)XML解析

XML全程是Extensiable Markup Language,可扩展标记语言。跟JSON一样,也是一种用于交换的数据格式。 XML语法 XML文档一般由以下部分组成: 文档声明元素(Element)属性(Attribute) 1 文档声明 在XML文档最前面,必须编写一个文档声明,用来声明XML文档的类型。 简单的声明 用encoding属性说明文档的字符编码 2

奋斗的菜鸟ing 1176

NSXMLParser详解

NSXMLParser详解 NSXMLParser 实现的是sax方法解析xml文件。 dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里。在需要的时候,查找特定节点,然后对节点进行读或写。他的主要优势是实现简单,读写平衡;缺点是比较占内存,因为他要把整个xml文档都读入内存,文件越大,这种缺点就越明显。 sax的实现方法和dom不同。他只在xml文档中查找特...

aocaojia9711的博客 182

NSXMLParser(SAX解析)

NSXMLParser(SAX解析)实现

ITcontend的专栏 963

一个很有用的iPhone文件处理代码库…

代码下载: http://github.com/AlanQuatermain/aqtoolkit/tree/master 如有需要的请自取,包括: - 写Log - 低内存占用 XML Parser优化 - 加密解密文件 - NSData+Base64 - NSError+CFStreamError - NSObject+Properties - NSString+PropertyKVC -

iphonecat的博客 608

创建用于 iPad 的 iOS 幻灯片应用程序

简介 常用缩写词 IDE:集成开发环境iOS:苹果的移动操作系统OS X:苹果用于 Macintosh 计算机的操作系统 为 iOS 设备如 iPad 或 iPhone 编写应用程序是非常受欢迎的活动,这毫不奇怪。这些设备华丽且易于使用。这些设备拥有数百万的用户,为这些设备开发应用程序利润可观。人们喜欢在 iPad 和 iPhone 靓丽的屏幕上观看自己的照片...

weixin_34354173的博客 116

ios如何解析xml文件

ios中如何解析xml文件 两种方法:1.ios中已有的NSXMLParse类 2.Google的GDataXML也是基于libxml2的,因此在使用GDataXML之前,你需要先导入libxml2。 这里详解ios中的nsxmlparse: NSXMLParser 实现的是sax方法解析xml文件。 dom实现的原理是把整个xml文档一次性读出,放在一个树型结构里。

水泽木兰 958

iOS GData解析xml

IOS平台上进行XML文档的解析有很多种方法,在SDK里面有自带的解析方法,但是大多情况下都倾向于用第三方的库,原因是解析效率更高、使用上更方便,关于IOS平台各种解析XML库的优缺点分析,可以看下这篇文章:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project 这里

有木有啊的专栏 8862

iOS网络编程开发—JSON解析XML解析

一、什么是JSON JSON是一种轻量级的数据格式,一般用于数据交互 服务器返回给客户端的数据,一般都是JSON格式或者XML格式(文件下载除外)   JSON的格式很像OC中的字典和数组 {"name" : "jack", "age" : 10} {"names" : ["jack", "rose", "jim"]} 标准JSON格式的注意点:key必须用双引号   要想从JS

Jason 的博客 4972

玩转iOS开发 - JSON 和 Xml 数据解析

前言Json 和xml是网络开发中常用的数据格式,JSON轻量级,xml相对较复杂,所以现在用JSON的比例非常大,基本上从服务器获取的返回数据都是JSON格式的,作为iOS开发者,解析JSON, XML文件是网络开发最基本的一步,不扯蛋了,直接进入正题。JSON解析JSON介绍 JSON 本质上,就是一个”特殊格式”的字符串JSON 是网络上用来传输数据使用最广泛的数据格式,没有之一 JSON

Focus Now 6026

NSXMLParser 在AFNetworking中的使用

好吧,一下博文转自:http://www.tuicool.com/articles/Qnmu6f 对xml进行解析的标准有两种:sax以及dom。 首先这两种标准并不是针对java的,他们在各种语言环境下都可以实现。dom是真正的国际标准。sax是事实的标准,它不由任何商业组织维 护,而是由一个非商业的组织在运作。就像iso7层模型和tcp/ip一样,虽然sax不是正式的标准,但是一点不...

weixin_30633405的博客 152

ios15使用NSXMLParser解析XML

ios15解析XML 今天我们使用NSXMLParser这个类解析XML解析的类必须遵守NSXMLParserDelegate代理。 - (void)viewDidLoad { [super viewDidLoad]; NSString *path = [[NSBundle mainBundle] pathForResource:@"111.xml" ofType:nil]; NSData *data = [NSData dataWithContentsOfFile:path];

A1521315qwss的博客 1601

xml解析代理NSXMLParserDelegate的使用步骤

[1]使用NSXMLParser对象的成员A存放本地xml文件的二进制内容 [2]创建一个代理,遵守NSXMLParserDelegate协议,代替A完成解析 [3]A执行解析方法,解析方法中有全部调用过程,但是被封闭了 [4]要完成这个工作,首先从代理的定义方法入手 代理要实现的代理方法解释: 1、 - (void)parserDidStartDocument

u013370834的博客 1523

iOS开发------XML原生解析(NSXMLParser篇)

由于项目需要,最近就研究了一些与视频流相关的知识,在学习的过程中发现,JSON作为轻量级的数据传输格式就显的非常不便.当然,这句话的意思就是说在学习过程中碰到的XML格式数据居多了呗,这时掌握一些XML解析方法就显得重要了。尽管之前转发过一篇介绍XML解析的博文网络数据的XML解析,但总觉得千转不如一写,所以就花时间研究了一下。很多第三方代码其实能够很好的帮助我们解析数据,但由于楼主的个性,在认可

RITL_Y 5459

iOS SDK中使用NSXMLParser解析XML

iOS SDK中使用NSXMLParser解析XML iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档。NSXMLParser在处理XML文档的过程中当遇到一些要素(元素、属性、CDATA块、评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给NSXMLParserDelegate处理。同时它也会报告错误。 1. 打开

silva_831的专栏 1345

NFPA 484-2022.pdf

NFPA 484-2022.pdf

上一篇: objective-C 中%@和%s
下一篇: IOS坐标体系与旋转
smallmuou
博客等级 码龄17年 41粉丝 57原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值