IOS 學習之XML解析(一)

征途LN發表於2014-02-12

在IOS平臺上進行XML文件的解析有很多種方法,在SDK裡面有自帶的解析方法,但是大多情況下都傾向於用第三方的庫,原因是解析效率更高、使用上更方便,關於IOS平臺各種解析XML庫的優缺點分析,可以看下這篇文章:http://www.raywenderlich.com/553/how-to-chose-the-best-xml-parser-for-your-iphone-project

這裡主要介紹一下由Google提供的一種在IOS平臺上進行XML解析的開源庫GDataXML,可以到http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/XMLSupport/下載原始碼,下載下來後進入資料夾找到XMLSupport資料夾,將裡面的GDataXMLNode.h和GDataXMLNode.m檔案拖拽到專案中新建的資料夾即可(我這裡是建的GDataXML資料夾),注意要選中複製檔案到專案中而不是隻是引用,如圖:



然後就是對工程進行一些配置,點選工程根目錄然後點選左邊的Target,進入Build Phases,然後點選第三個Link binary with libraries,點選加號搜尋libxml2並將這個庫新增到工程,如圖:



接下來再進入Build Settings,在搜尋框中搜尋Head Search Path,然後雙擊並點選+按鈕新增/usr/include/libxml2,如圖:


接下來再搜尋框中搜尋Other linker flags,同樣的方式新增-lxml2,如圖:


到這裡,新增和配置的工作就完成了(是有點麻煩),接下來就看如何使用了:

首先在工程中新建一個xml檔案,作為我們要解析的物件,新建方法是在工程中新建一個Empty的檔案,命名為users.xml,然後新增內容:

[html] view plaincopy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <Users>  
  3.     <User id="001"]]>  
  4.         <name>Ryan</name>  
  5.         <age>24</age>  
  6.     </User>  
  7.     <User id="002"]]>  
  8.         <name>Tang</name>  
  9.         <age>23</age>  
  10.     </User>  
  11. </Users>  

接下來就可以開始解析了,在需要解析的檔案中引入標頭檔案:#import"GDataXMLNode.h"

我是新建的一個Empty工程,所以直接在AppDelegate.m中使用,程式碼如下:

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     self.window = [[[UIWindowalloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];  
  4.     // Override point for customization after application launch.  
  5.     self.window.backgroundColor = [UIColorwhiteColor];  
  6.     [self.windowmakeKeyAndVisible];  
  7.       
  8.     //獲取工程目錄的xml檔案  
  9.     NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];  
  10.     NSData *xmlData = [[NSData alloc] initWithContentsOfFile:filePath];  
  11.       
  12.     //使用NSData物件初始化  
  13.     GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:xmlData  options:0error:nil];  
  14.       
  15.     //獲取根節點(Users)  
  16.     GDataXMLElement *rootElement = [doc rootElement];  
  17.       
  18.     //獲取根節點下的節點(User)  
  19.     NSArray *users = [rootElement elementsForName:@"User"];  
  20.       
  21.     for (GDataXMLElement *user in users) {  
  22.         //User節點的id屬性  
  23.         NSString *userId = [[user attributeForName:@"id"] stringValue];  
  24.         NSLog(@"User id is:%@",userId);  
  25.           
  26.         //獲取name節點的值  
  27.         GDataXMLElement *nameElement = [[user elementsForName:@"name"] objectAtIndex:0];  
  28.         NSString *name = [nameElement stringValue];  
  29.         NSLog(@"User name is:%@",name);  
  30.           
  31.         //獲取age節點的值  
  32.         GDataXMLElement *ageElement = [[user elementsForName:@"age"] objectAtIndex:0];  
  33.         NSString *age = [ageElement stringValue];  
  34.         NSLog(@"User age is:%@",age);  
  35.         NSLog(@"-------------------");  
  36.     }      
  37.           
  38.     returnYES;  
  39. }  

編譯執行在控制檯輸出結果如下:



相關文章