够用就好,用TBXML进行XML解析

    在iPhone上,有各种各样的XML解析方式,这些XML解析方式各有优劣。本着够用就好的原则,我是比较青睐于使用TBXML。正如它的官方介绍所说,TBXML具有如下特点:速度快,效率高,占用的资源少。以我这个菜鸟的眼观来看,用起来确实方便。上手容易,快速。虽然不支持写的功能,但是有些情况下,TBXML还是能够胜任的。

    项目地址:http://www.tbxml.co.uk/TBXML/TBXML_Free.html

    TBXML属于DOM的解析方式。需要去找寻root节点。然后按着名字顺序查找。找到某个节点之后,如果需要找寻孩子信息,那么使用这个节点做为parent,继续向里面查找。在开始使用TBXML之前,需要先去官网把TBXML.zip下载下来,解压后把里面的4个文件拖入到项目中,然后为项目添加libz.dylib框架即可。


TBXML项目的结构很简单:

==========================================================
文件

tbxml“框架”中包含的文件:
TBXML.h - tbxml声明
TBXML.m - tbxml实现
NSDataAdditions.h - NSData类别等的声明
NSDataAdditions.m - NSData类别等的实现,包括base64,gzip,NSData类别等等

==========================================================
结构体

TBXMLElement结构体,包含XML中对应element的信息. 包括元素标签名、元素text值、指向第一个属性对象的指针、父元素、首个子元素,以及下一个兄弟元素.可以用这个结构体创建一个链表(树)来表示一个完整的xml文件.
结构如下:
typedef struct _TBXMLElement {
char * name;
char * text;
TBXMLAttribute * firstAttribute;
struct _TBXMLElement * parentElement;
struct _TBXMLElement * firstChild;
struct _TBXMLElement * currentChild;
struct _TBXMLElement * nextSibling;
struct _TBXMLElement * previousSibling;
} TBXMLElement;

TBXMLAttribute结构体,包含了xml中的属性信息. 包括属性名、属性值和下一个兄弟属性对象的指针. 使用这个结构可以创建一个Element的属性链表.
typedef struct _TBXMLAttribute {
char * name;
char * value;
struct _TBXMLAttribute * next;
} TBXMLAttribute;

TBXMLElementBuffer结构体,是用来缓存TBXMLElement结构体对象的. 当被使用时, 将新建一个缓存区并连接到前一个上(链表).这样可以有效的管理Element在内存的创建和回收.
typedef struct _TBXMLElementBuffer {
TBXMLElement * elements;
struct _TBXMLElementBuffer * next;
struct _TBXMLElementBuffer * previous;
} TBXMLElementBuffer;

TBXMLAttributeBuffer结构体,是用来缓存TBXMLAttribute对象的. 当被使用时, 将新建一个缓存区并连接到前一个上(链表). 这样可以有效的管理Attribute在内存的创建和回收.
typedef struct _TBXMLAttributeBuffer {
TBXMLAttribute * attributes;
struct _TBXMLAttributeBuffer * next;
struct _TBXMLAttributeBuffer * previous;
} TBXMLAttributeBuffer;

==========================================================


==========================================================

常用的初始化方式有。如下几种。 

+ (id)tbxmlWithURL:(NSURL*)aURL;

+ (id)tbxmlWithXMLString:(NSString*)aXMLString;

+ (id)tbxmlWithXMLData:(NSData*)aData;

+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile;

+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension;


- (id)initWithURL:(NSURL*)aURL;

- (id)initWithXMLString:(NSString*)aXMLString;

- (id)initWithXMLData:(NSData*)aData;

- (id)initWithXMLFile:(NSString*)aXMLFile;

- (id)initWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension;

==========================================================


==========================================================
其包含的静态方法只有7个:

@interface TBXML (StaticFunctions)


+ (NSString*) elementName:(TBXMLElement*)aXMLElement;

+ (NSString*) textForElement:(TBXMLElement*)aXMLElement;

+ (NSString*) valueOfAttributeNamed:(NSString *)aName forElement:(TBXMLElement*)aXMLElement;


+ (NSString*) attributeName:(TBXMLAttribute*)aXMLAttribute;

+ (NSString*) attributeValue:(TBXMLAttribute*)aXMLAttribute;


+ (TBXMLElement*) nextSiblingNamed:(NSString*)aName searchFromElement:(TBXMLElement*)aXMLElement;

+ (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement;


@end 

==========================================================


例子后面再上,因为例子涉及到多线程处理,还没调试完,暂时的还拿不出手 .......



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值