IOS学习:常用第三方库(GDataXMLNode:xml解析库)
IOS學習:常用第三方庫(GDataXMLNode:xml解析庫)
?解析?XML?通常有兩種方式,DOM 和 SAX:
DOM解析XML時,讀入整個XML文檔并構建一個駐留內存的樹結構(節點樹),通過遍歷樹結構可以檢索任意XML節點,讀取它的屬性和值。而且通常情況下,可以借助XPath,直接查詢XML節點。
SAX解析XML,是基于事件通知的模式,一邊讀取XML文檔一邊處理,不必等整個文檔加載完之后才采取操作,當在讀取解析過程中遇到需要處理的對象,會發出通知對其進行處理。
一般在iOS平臺下,比較常用的XML解析類庫有如下幾種:
NSXMLParser,http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html ,這是一個SAX方式解析XML的類庫,默認包含在iOS SDK中,使用也比較簡單。
libxml2,http://xmlsoft.org/,是一套默認包含在iOS SDK中的開源類庫,它是基于C語言的API,所以使用起來可能不如NSXML方便。這套類庫同時支持DOM和SAX解析,libxml2的SAX解析方式還是非常酷的,因為它可以邊讀取邊解析,尤其是在從網上下載一個很大的XML文件,就可以一邊下載一邊對已經下載好的內容進行解析,極大的提高解析效率。
TBXML,http://www.tbxml.co.uk/TBXML/TBXML_Free.html,這是一套輕量級的DOM方式的XML解析類庫,有很好的性能和低內存占用,不過它不對XML格式進行校驗,不支持XPath,并且只支持解析,不支持對XML進行修改。
TouchXML,https://github.com/TouchCode/TouchXML,這也是一套DOM方式的XML解析類庫,支持XPath,不支持XML的修改。
KissXML,http://code.google.com/p/kissxml/,這是一套基于TouchXML的XML解析類庫,和TouchXML相比,支持了XML的修改。
TinyXML,http://www.grinninglizard.com/tinyxml/,這是一套小巧的基于C語言的DOM方式進行XML解析的類庫,支持對XML的讀取和修改,不直接支持XPath,需要借助另一個相關的類庫TinyXPath才可以支持XPath。
GDataXML,http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/,這是一套Google開發的DOM方式XML解析類庫,支持讀取和修改XML文檔,支持XPath方式查詢。
?
一、GDataXMLNode說明 ? GDataXMLNode是Google提供的用于XML數據處理的類集。該類集對libxml2--DOM處理方式進行了封裝,能對較小或中等的xml文檔進行讀寫操作且支持XPath語法。 ? 使用方法: ? ? ?1、獲取GDataXMLNode.h/m文件,將GDataXMLNode.h/m文件添加到工程中 ? ? ?2、向工程中增加“libxml2.dylib”庫 ? ? ?3、在工程的“Build Settings”頁中找到“Header Search Path”項,添加/usr/include/libxml2"到路徑中 ? ? ?4、添加“GDataXMLNode.h”文件到頭文件中,如工程能編譯通過,則說明GDataXMLNode添加成功 ? 二、GDataXMLNode示例 ? 示例: [html]?view plaincopy? ? ? 運行結果: ? ? ? ?? ? ?? ? 三、GDataXMLNode方法小結 ? ? ? ?最終的數據讀出都是在GDataXMLElement對象中讀出的,以下方法均為GDataXMLElement類的方法 ? ? ?1、name方法,取標簽名 e.g name標簽的名稱“name” ? ? ?2、attributeForName: 取屬性結點 再調stringValue即可取到屬性值 e.g name標簽中的value屬性 ? ? ?3、stringValue: 取標簽間的字符串值 ?e.g: age間的24
?
//DOM 解析
- (IBAction)dommethord:(id)sender {
?
? ? //1,拿到文件
? ? NSString *path = [[NSBundle mainBundle] pathForResource:@"xml" ofType:@"txt"];
? ? //2,根據路徑拿到數據
? ? NSData *data = [NSData dataWithContentsOfFile:path];
?? ?
? ? //3,創建解析對象
? ? GDataXMLDocument *document = [[GDataXMLDocument alloc] initWithData:data options:0 error:nil];
?
? ? //4,獲取根
? ? GDataXMLElement *rootElement = document.rootElement;
?
? ? //初始化數組
? ? _allDataMutaArray = [NSMutableArray array];
? ? _allDataMutaString = [NSMutableString string];
?? ?
? ? //5,獲取根節點下的 所有子節點
? ? NSArray *stuArrayElement = rootElement.children;
?? ?
? ? //6,遍歷每一個Student
? ? for (GDataXMLElement *stuElement in stuArrayElement) {
? ? ? ? //每遍歷一次就 創建一個模型
? ? ? ? Student *stu = [Student new];
? ? ? ? //7,遍歷子節點
? ? ? ? for (GDataXMLElement *stuSubElement in stuElement.children) {
? ? ? ? ? ? //8,使用KVC的方式 對模型對象進行復制
? ? ? ? ? ? [stu setValue:stuSubElement.stringValue forKey:stuSubElement.name];
? ? ? ? ? ? //打印
? ? ? ? ? ? NSLog(@"%@ %@ ",stuSubElement.name,stuSubElement.stringValue);
? ? ? ? ? ? [_allDataMutaString appendString:stuSubElement.stringValue];
? ? ? ? }
? ? ? ? //將添加好的模型放入數組中
? ? ? ? [_allDataMutaArray addObject:stu];
? ? ? ? [stu release];
? ? ? ?
? ? ? ? NSLog(@"----%lu",stu.retainCount);
? ? ? ?
? ? }
? ? NSLog(@" 數據項? %@",_allDataMutaArray);
?? ?
? ? _textFieldView.text = _allDataMutaString;
?? ?
? ? [document release];
}
轉載于:https://www.cnblogs.com/iOS-mt/p/4172059.html
總結
以上是生活随笔為你收集整理的IOS学习:常用第三方库(GDataXMLNode:xml解析库)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apache2.4 与 PHP 5.5
- 下一篇: 谈谈.NET MVC QMVC高级开发