iOS平台XML解析類庫對比和安裝說明

來源:互聯網
上載者:User

在iPhone開發中,XML的解析有很多選擇,iOS SDK提供了NSXMLParser和libxml2兩個類庫,另外還有很多第三方類庫可選,例如TBXML、TouchXML、KissXML、TinyXML和GDataXML。問題是應該選擇哪一個呢?

解析 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方式查詢。
  • 那麼對於如何在項目中選擇合適的XML解析類庫呢?網上已經有人對這幾款XML類庫做過分析和對比,可參考《How To Choose The Best XML Parser for Your iPhone Project》http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project 一文,基本比較準確和客觀,文中建議:
  • 如果是讀取很小的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目錄下的檔案和目錄都拖到項目中

3. 選中項目,選中“Build Settings”標籤頁

4. 將Build Settings頁中,頂部的“Basic”標籤切換到“All”

5. 找到“Paths\Header Search Paths”項,並添加“/usr/include/libxml2”到列表中

6. 找到“Linking\Other Linker Flags”項,並添加“-lxml2”到列表中

在需要調用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];

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.