最近再做一個項目需要用到xml的解析。今天查了一些資料自己做了一個小demo。純OC沒有界面。。
在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文件,作為我們要解析的對象。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<name value="lixingle"/>
<age>22</age>
<name value="wildcat"/>
<age>21</age>
</root>
主函數:
//
// main.m
// XMLGdatademo2
//
// Created by WildCat on 13-8-4.
// Copyright (c) 2013年 wildcat. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "GdataXMLNode.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//NSString *filePath = [[NSBundle mainBundle] pathForResource:@"users" ofType:@"xml"];
//獲取工程目錄的xml文件
NSString *filePath=[NSString stringWithFormat:@"/WildCat/IOSTiKu/2013_OC/XMLGdatademo2/test.xml"];
//獲得data
NSString *xmlString = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];
GDataXMLDocument *xmlDoc = [[GDataXMLDocument alloc] initWithXMLString:xmlString options:0 error:nil];
GDataXMLElement *xmlEle = [xmlDoc rootElement];
NSArray *array = [xmlEle children];
NSLog(@"count : %zi", [array count]);
for (int i = 0; i < [array count]; i++) {
GDataXMLElement *ele = [array objectAtIndex:i];
// 根據標簽名判斷
if ([[ele name] isEqualToString:@"name"]) {
// 讀標簽里面的屬性
NSLog(@"name --> %@", [[ele attributeForName:@"value"] stringValue]);
} else {
// 直接讀標簽間的String
NSLog(@"age --> %@", [ele stringValue]);
}
}
}
return 0;
}
結果:
2013-08-04 14:05:46.814 XMLGdatademo2[1825:303] count : 4
2013-08-04 14:05:46.818 XMLGdatademo2[1825:303] name --> lixingle
2013-08-04 14:05:46.819 XMLGdatademo2[1825:303] age --> 22
2013-08-04 14:05:46.819 XMLGdatademo2[1825:303] name --> wusj
2013-08-04 14:05:46.820 XMLGdatademo2[1825:303] age --> 24
