当前位置: 首页 > 工具软件 > TBXML > 使用案例 >

TBXML

陶飞鸿
2023-12-01

TBXML  

2011-05-21 09:51:20|  分类: MAC相关|字号 订阅

提示 : 在加入TBXML库后,需要加入libz.dylib动态库,以避免编译错误。

更多xml解析请参考:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project
==============================================================================
文件

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;

==============================================================================
方法

1.实例化
+ (id)tbxmlWithXMLFile:(NSString*)aXMLFile;
用xml文件名(包括扩展名)实例化一个tbxml对象
例如:TBXML * tbxml = [[TBXML alloc] initWithXMLFile:@"books.xml"];

- (id)initWithXMLFile:(NSString*)aXMLFile fileExtension:(NSString*)aFileExtension
用xml文件名和扩展名实例化一个tbxml对象
例如:TBXML * tbxml = [[TBXML alloc] initWithXMLFile:@"books" fileExtension:@"xml"];

- (id)initWithXMLString:(NSString*)aXMLString
用一段xml内容代码来实例化一个tbxml对象
例 如:tbxml = [[TBXML alloc] initWithXMLString:@"<root><elem1 attribute1=\"elem1 attribute1\"/><elem2 attribute2=\"elem2 attribute2\"/></root>;"];

- (id)initWithXMLData:(NSData*)aData
用一个封装了xml内容的NSData对象来实例化tbxml对象
例如:TBXML * tbxml = [[TBXML alloc] initWithXMLData:myXMLData];

- (id)initWithURL:(NSURL*)aURL
用一个URL来实例化一个tbxml
例如:tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:@"http://www.ifanr.com/feed"]];


2.成员方法
+ (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement
获得aParentXMLElement元素的首个名字为aName的元素
例如:TBXMLElement * author = [TBXML childElementNamed:@"author" parentElement:rootXMLElement];

+ (TBXMLElement*) nextSiblingNamed:(NSString*)aName searchFromElement:(TBXMLElement*)aXMLElement
返回下一个名为aName的兄弟元素
例如:TBXMLElement * author = [TBXML nextSiblingNamed:@"author" searchFromElement:author];

+ (NSString*) valueOfAttributeNamed:(NSString *)aName forElement:(TBXMLElement*)aXMLElement
返回aXMLElement元素中,名为aName的属性的属性值。
例如:NSString * authorName = [TBXML valueOfAttributeNamed:@"name" forElement:authorElement];

+ (NSString*) textForElement:(TBXMLElement*)aXMLElement
返回元素aXMLElement的text值
例如:NSString * bookDescription = [TBXML textForElement:bookElement];

+ (NSString*) elementName:(TBXMLElement*)aXMLElement;
返回元素aXMLElement的标签名
例如:NSString * elementName = [TBXML elementName:element];

+ (NSString*) attributeName:(TBXMLAttribute*)aXMLAttribute;
返回属性aXMLAttribute的属性名
例如:NSString * attributeName = [TBXML attributeName:attribute];

+ (NSString*) attributeValue:(TBXMLAttribute*)aXMLAttribute;
返回属性aXMLAttribute的属性值
例如:NSString * attributeValue = [TBXML attributeValue:attribute];

常用的基本就这些,通过合理的迭代,递归等组合调用,基本可以解决所有的解析问题。
 类似资料:

相关阅读

相关文章

相关问答