IOS中使用TBXML解析XML

  IOS
SDK自带的NSXML框架是采用SAX模式解析的,是基于事件驱动型的,主要解析工作在NSXMLParseDelegate中完成,解析过程中遇到开始标签、结束标签、文档开始、文档结束和字符串时触发Delegate中的方法完成解析,这种方式使用起来还是比较麻烦的。在实际工作中,我们可以选用一个比较简单易用的第三方框架TBXML,其下载地址为:https://github.com/71squared/tbxml

  下载完成解压后,我们只需要将TBXML-Headers和TBXML-Code文件夹添加到工程中,并在工程头文件xxx-Prefix.pch中添加宏定义:#define
ARC_ENABLED

  由于TBXML依赖于libz.dylib库,还需在工程的Framework中添加这个库,添加完,可以编译试运行一下看是否出错,没错则继续。

  例如,我们要解析以下xml文件:


<?xml version="1.0" encoding="UTF-8"?>
<Notes>
<Note id="1">
<CDate>2012-12-21</CDate>
<Content>早上8点钟到公司</Content>
<UserID>tony</UserID>
</Note>
<Note id="2">
<CDate>2012-12-22</CDate>
<Content>发布iOSBook1</Content>
<UserID>tony</UserID>
</Note>
<Note id="3">
<CDate>2012-12-23</CDate>
<Content>发布iOSBook2</Content>
<UserID>tony</UserID>
</Note>
<Note id="4">
<CDate>2012-12-24</CDate>
<Content>发布iOSBook3</Content>
<UserID>tony</UserID>
</Note>
<Note id="5">
<CDate>2012-12-25</CDate>
<Content>发布2016奥运会应用iPhone版本</Content>
<UserID>tony</UserID>
</Note>
<Note id="6">
<CDate>2012-12-26</CDate>
<Content>发布2016奥运会应用iPad版本</Content>
<UserID>tony</UserID>
</Note>
</Notes>

  创建一个NotesTBXMLParser类来解析XML文档,具体实现代码如下:


//  NotesTBXMLParser.h

#import "TBXML.h"

@interface NotesTBXMLParser : NSObject

//解析出的数据内部是字典类型
@property (strong,nonatomic) NSMutableArray *notes;
//开始解析
-(void)start;

@end


#import "NotesTBXMLParser.h"

@implementation NotesTBXMLParser

//开始解析
-(void)start
{
_notes = [NSMutableArray new];
TBXML* tbxml = [[TBXML alloc] initWithXMLFile:@"Notes.xml" error:nil]; //从文件构造TBXML对象
TBXMLElement * root = tbxml.rootXMLElement;//获取文档的根元素对象
// if root element is valid
if (root) {
TBXMLElement * noteElement = [TBXML childElementNamed:@"Note" parentElement:root];
while ( noteElement != nil) {
NSMutableDictionary *dict = [NSMutableDictionary new];

TBXMLElement *CDateElement = [TBXML childElementNamed:@"CDate" parentElement:noteElement];
if ( CDateElement != nil) {
NSString *CDate = [TBXML textForElement:CDateElement];
[dict setValue:CDate forKey:@"CDate"];
}

TBXMLElement *ContentElement = [TBXML childElementNamed:@"Content" parentElement:noteElement];
if ( ContentElement != nil) {
NSString *Content = [TBXML textForElement:ContentElement];
[dict setValue:Content forKey:@"Content"];
}

TBXMLElement *UserIDElement = [TBXML childElementNamed:@"UserID" parentElement:noteElement];
if ( UserIDElement != nil) {
NSString *UserID = [TBXML textForElement:UserIDElement];
[dict setValue:UserID forKey:@"UserID"];
}

//获得ID属性
NSString *_id = [TBXML valueOfAttributeNamed:@"id" forElement:noteElement error:nil];
[dict setValue:_id forKey:@"id"];
[_notes addObject:dict];

noteElement = [TBXML nextSiblingNamed:@"Note" searchFromElement:noteElement];
}
}
NSLog(@"解析完成...");

[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadViewNotification" object:self.notes userInfo:nil];
self.notes = nil;
}

@end

IOS中使用TBXML解析XML

时间: 2024-10-19 23:49:41

IOS中使用TBXML解析XML的相关文章

iOS中的数据解析(XML,JSON),SAX解析,DOM解析

第三方 SAT解析 #import "SAXTableViewController.h" #import "Student.h" @interface SAXTableViewController ()<NSXMLParserDelegate> @property (nonatomic, retain) NSMutableArray *dataSourse; // 存储学生对象 @property (nonatomic, retain) Student

iOS SDK中使用NSXMLParser解析XML(iphone网络篇三)

iOS SDK的NSXMLParser解析XML文档是事件驱动模式的,即采用SAX方式来解析XML格式文档.NSXMLParser在处理XML文档的过程中当遇到一些要素(元素.属性.CDATA块.评论等)时会通知它的委托,而自身不对解析的要素进行任何处理,全权委托给NSXMLParserDelegate处理.同时它也会报告错误. 1. 打开一个xml文件,读取内容到NSData中. NSString *path = [[NSBundle mainBundle] pathForResource:@

用TBXML解析XML数据

总的来说,iphone 上可用的解析XML的方式大概有2种类型的. 1.Tree-based API:这种API的处理方式是将XML的结构看成是树,然后把树的各部分看成一个对象来处理,这就是我们说的DOM (Document Object Model)方式.在iPhone的SDK里包含了一个libxml2的框架(Framework)就能进行DOM解析方式.Google的GDataXML也是基于libxml2的,因此在使用GDataXML之前,你需要先导入libxml2. 2.Event-driv

转:在java中使用dom4j解析xml

在java中使用dom4j解析xml 虽然Java中已经有了Dom和Sax这两种标准解析方式 但其操作起来并不轻松,对于我这么一个初学者来说,其中部分代码是活生生的恶心 为此,伟大的第三方开发组开发出了Jdom和Dom4j等工具 鉴于目前的趋势,我们这里来讲讲Dom4j的基本用法,不涉及递归等复杂操作 Dom4j的用法很多,官网上的示例有那么点儿晦涩,这里就不写了 首先我们需要出创建一个xml文档,然后才能对其解析 xml文档: <?xml version="1.0" encod

JAVA中使用DOM解析XML文件

JAVA中使用DOM解析XML文件: 创建DocumentBuilderFactory的对象                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 创建DocumentBuilder对象 通过documentBuilder对象的parser方法加载xml文件到当前项目下 获取所有XML文件内节点的集合    getElementsByTagName()方

java中采用dom4j解析xml文件

一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4j解析xml的具体操作. 二.代码详情    dom4j是一个第三方开发组开发出的插件,所以在我们使用dom4jf的时候我们要去下载一下dom4j对应版本的jar导入在我们项目中.  1)xml文件: <?xml version="1.0" encoding="UTF-8&

《转》 在C++中使用TinyXML2解析xml

读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树. DOM模型即文档对象模型,是将整个文档分成多个元素(如书.章.节.段等),并利用树型结构表示这些元素之间的顺序关系以及嵌套包

在java中使用dom4j解析xml

创建xml文档并输出到文件 import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.io.OutputFormat; import org.dom4j.io.XMLWriter; public class Demo { public stat

Qt中三种解析xml的方式

在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面三种解析xml采用相同的原理,所以就算你不是学习qt,也可以大致参看一下代码,对三种解析方式有一种大致的感觉. 先给出xml如下: <?xml version="1.0" encoding="utf-8"?> <school> <teach