由于最近在研究 学习 xml解析方面的东西~所以一直在查阅有关方面的资料 ,现在分享给大家
iPhone SDK 自带了两个 libraries,一个是NSXMLPraser 一个是libxml2 。
除此之外还有很多第三方的 XML Parser libraries,包括 TBXML, TouchXML, KissXML, TinyXML, and GDataXML,由于自己也是刚接触,所以这些暂时还不大了解,大家可以研究研究,别忘了分享就行。
先说NSXMLPraser
(1) 它的优点是实现简单 ,读写平衡;
但是他的缺点也比较明显:占内存比较大,需要把整个xml文档都读入内存,所以对于比较大的文档 ,它的运行速度会很慢
(2)他实现起来也比较简单
利用委托函数来实现 <NSXMLPraserDelegate>
大致步骤是 initwithData、initwithcontentofUrl来初始化
设置其代理 setdelegate
然后调用 prase来运行解析器
(3) 主要用到的委托方法(转)
//发现元素开始符的处理函数 (即报告元素的开始以及元素的属性)
- (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
再说libxml2
(1)开源的,也是 SDK 自带的,用的是 C 语言,同时支持 SAX 和 DOM。它有一个非常好的特性,parse 和 read 同时进行,也就是说你不用等到整个文档下载完以后 才读,比如你需要 parse 一个非常大的文件,你不希望用户等你 parse 完才看到内容,你可以这 parse 的同时把内容呈现出来。
(2)他的解析方法
1.用xmlReadFile 读出一个文档指针
2.用xmlDocGetRootElement 的到根节点
3.curNode->xmlchildrenNode 找到根节点的子节点集合
4.遍历子节点集合,找到需要的节点
5.用xmlHasProp 查找含有某个属性的节点
6.取出该节点的属性集合,用xmlGetProp取出其属性值
7.用xmlFreeDoc关闭
总结 因个人喜好比较喜欢libxml2, 当然因人而异,很多人比较喜欢touchxml方法 ,再说我也是初学者 ,希望大师们教导。