iOS中XML解析汇总
?
在時間上TBXML占優,libxml2支持了邊下載邊解析。
?
來源:http://www.codeios.com/forum.php?mod=viewthread&tid=9880&highlight=xml
?
?
解析 XML 通常有兩種方式,DOM 和 SAX:
?
DOM解析XML時,讀入整個XML文檔并構建一個駐留內存的樹結構(節點樹),通過遍歷樹結構可以檢索任意XML節點,讀取它的屬性和值。而且通常情況下,可以借助XPath,直接查詢XML節點。
?
SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之后才采取操作,當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理。
?
一般在iOS平臺下,比較常用的XML解析類庫有如下幾種:
?
NSXMLParser,這是一個SAX方式解析XML的類庫,默認包含在iOS SDK中,使用也比較簡單。
?
libxml2,是一套默認包含在iOS SDK中的開源類庫,它是基于C語言的API,所以使用起來可能不如NSXML方便。這套類庫同時支持DOM和SAX解析,libxml2的SAX解析方式還是非常酷的,因為它可以邊讀取邊解析,尤其是在從網上下載一個很大的XML文件,就可以一邊下載一邊對已經下載好的內容進行解析,極大的提高解析效率。
?
TBXML,這是一套輕量級的DOM方式的XML解析類庫,有很好的性能和低內存占用,不過它不對XML格式進行校驗,不支持XPath,并且只支持解析,不支持對XML進行修改。
?
TouchXML,這也是一套DOM方式的XML解析類庫,支持XPath,不支持XML的修改。
?
KissXML,這是一套基于TouchXML的XML解析類庫,和TouchXML相比,支持了XML的修改。
?
TinyXML,這是一套小巧的基于C語言的DOM方式進行XML解析的類庫,支持對XML的讀取和修改,不直接支持XPath,需要借助另一個相關的類庫TinyXPath才可以支持XPath。
?
GDataXML,這是一套Google開發的DOM方式XML解析類庫,支持讀取和修改XML文檔,支持XPath方式查詢。
?
那么對于如何在項目中選擇合適的XML解析類庫呢?網上已經有人對這幾款XML類庫做過分析和對比,可參考《How To Choose The Best XML Parser for Your iPhone Project》 一文,基本比較準確和客觀,文中建議:
?
如果是讀取很小的XML文檔,性能基本上沒有什么差別,不過從調用的方便性來說,建議使用TouchXML、KissXML或GDataXML
?
如果是需要讀取和修改XML文檔,建議使用KissXML或GDataXML
?
如果需要讀取非常大的XML文檔,則建議使用libxml2或TBXML
?
如果你不想去調用第三方類庫,那么使用NSXML也可以
?
?
TBXML
?
1. 解壓TBXML.zip后,將包含TBXML.h, TBXML.m, NSDataAdditions.h和NSDataAddtions.m四個文件的文件夾拖到項目中
2. 添加對libz.dylib類庫的應用 (項目=>Build Phases=>Link Binary With Libraries=>+=>libz.dylib=>add)
?
在需要調用TBXML的代碼文件頭部,加入:
C代碼??來源:?http://www.61ic.com/Mobile/iPhone/201108/36543.html
?
?
使用說明:
?
.h
C代碼??.m
Java代碼??如果你關閉了ARC,請替換?tbxml = nil; 為?[tbxml release];
如果你開啟了ARC,會有類似“arc forbids explicit message send of ...”這樣的錯誤,那么你需要轉換一下:
?
?
Edit => Refactor => Convert to Objective-C ARC...
?
其實就是把 NSDataAdditions.m 中的 [result autorelease] 替換成 return result;
?
或者干脆關閉ARC,方法為:打開當前工程,打開"Build Settings",找到Objective-C Automatic Reference Counting項,將它的值設置為NO。
?
?
本實例為ARC開啟
?
全部API為:
?
http://www.tbxml.co.uk/TBXML/API.html
?
?
方法
?
?
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];
?
常用的基本就這些,通過合理的迭代,遞歸等組合調用,基本可以解決所有的解析問題。
?
?
關聯:iOS中XML解析 (二) libxml2(實例:打印xml內容及存儲到數組)?
?
- TBXML.zip?(11.5 KB)
- 下載次數: 81
- TBXML-Books.zip?(54.1 KB)
- 下載次數: 69
- KissXML-5.0-0-g8256048.zip?(94.2 KB)
- 下載次數: 33
- TouchCode-TouchXML-0.1-NonARC-1-g540e643.zip?(1.1 MB)
- 下載次數: 29
- tinyxml_2_6_2.zip?(284.1 KB)
- 下載次數: 26
- GDataXML.zip?(15.2 KB)
- 下載次數: 43
總結
以上是生活随笔為你收集整理的iOS中XML解析汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界怀旧服赤脊山采矿点在哪?赤脊山采
- 下一篇: iOS块传值