常用XML解析器分為兩類 DOM解析器和SAX解析器
DOM解析XML時,讀入整個XML文檔并建構一個駐留記憶體的樹結構(節點樹),通過周遊樹結構可以檢索任意XML節點,讀取它的屬性和值。而且通常情況下,可以借助XPath,直接查詢XML節點。
SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之後才采取操作,當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理。
iOS SDK提供了NSXMLParser和libxml2兩個類庫,另外還有很多第三方類庫可選,例如TBXML、TouchXML、KissXML、TinyXML和GDataXML。
NSXMLParser 這是iPhone SDK中自帶的Sax解析器,在DOM解析方面較弱,由Objective-C語言編寫。 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html
libxml2 這也是iPhone SDK中自帶的,是一個開源的庫, 這是基于C的,是以比NSXML用得更廣一些。主要的特性就是可以一邊讀取一邊解析。也就是說,xml檔案一邊還在下載下傳着,你的程式中已經可以顯示裡面的内容了。
http://xmlsoft.org/
TBXML 這是一個輕量級的DOM解析器,為了加快DOM方式的解析速度而誕生,不支援XPath,也不能修改XML檔案中的内容。
http://www.tbxml.co.uk/TBXML/TBXML_Free.html
TouchXML 這是一個NSXML類似的DOM解析器,就像TBXML一樣,這是隻讀的,但是卻支援XPath查詢。
https://github.com/TouchCode/TouchXML
KissXML 這是TouchXML的改進版本,支援讀寫。
http://code.google.com/p/kissxml/
TinyXML 基于C的DOM解析器,體積很小但是支援讀寫,不支援XPath,但是你可以使用TinyXpath來幫助這個庫。
http://www.grinninglizard.com/tinyxml/
GDataXML 這是谷歌官方開發的Objective-C用戶端庫的一部分,也是一個NSXML類似的DOM解析器,支援讀寫和XPath查詢。
http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/
如果是讀取很小的XML文檔,性能基本上沒有什麼差别,不過從調用的友善性來說,建議使用TouchXML、KissXML或GDataXML
如果是需要讀取和修改XML文檔,建議使用KissXML或GDataXML
如果需要讀取非常大的XML文檔,則建議使用libxml2或TBXML
如果你不想去調用第三方類庫,那麼使用NSXML也可以
安裝說明
GDataXML
1. 從http://code.google.com/p/gdata-objectivec-client/downloads/list下載下傳“gdata-objective-c client library.”
2. 解壓縮檔案,找到Source\XMLSupport,并且将其中的GDataXMLNode.h 和 GDataXMLNode.m檔案拖到項目中
3. 選中項目,選中“Build Settings”标簽頁
4. 将Build Settings頁中,頂部的“Basic”标簽切換到“All”
5. 找到“Paths\Header Search Paths”項,并添加“/usr/include/libxml2”到清單中
6. 找到“Linking\Other Linker Flags”項,并添加“-lxml2”到清單中
在需要調用GDataXML的代碼檔案頭部,加入:
#import “GDataXMLNode.h”
TouchXML
1. 從https://github.com/TouchCode/TouchXML下載下傳最新TouchXML源碼
2. 解壓後,将其中的Sources目錄下的檔案和目錄都拖到項目中
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIml2ZuADNwYDN4EzLcRDM4ATMxAjMvw1ZtlGZh9GbwV3LcNXZslmZvwVbvNmLvR3YxUjLldWYtl2Lc9CX6MHc0RHaiojIsJye.gif)
在需要調用TouchXML的代碼檔案頭部,加入:
#import “TouchXML.h”
TBXML
1. 從http://www.tbxml.co.uk/TBXML/TBXML_Free.html下載下傳最新TBXML源碼
2. 解壓後,将其中的TBXML.h, TBXML.m, NSDataAdditions.h和NSDataAddtions.m四個檔案拖到項目中
3. 添加對libz.dylib類庫的應用
在需要調用TBXML的代碼檔案頭部,加入:
#import “TBXML.h”
使用說明
GDataXML
讀取XML檔案,并解析成為DOM文檔對象示例:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"xml"];
NSData *xmlData = [[NSMutableData alloc] initWithContentsOfFile:filePath];
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData options:0 error:&error];
if (doc == nil) { return nil; }
NSLog(@"%@", doc.rootElement);
[doc release];
[xmlData release];
原部落格位址 http://mobile.51cto.com/iphone-281283.htm
本文轉自新風作浪 51CTO部落格,原文連結:http://blog.51cto.com/duxinfeng/1208725,如需轉載請自行聯系原作者