有如上xml檔案
/*** xml解析
分為兩種方式:sax解析和dom解析。
sax解析:逐行進行解析資料
優點:1.逐行解析,不會一次性讀入文件,減少記憶體消耗。
2. 因為是逐行解析,xml檔案損壞對其沒有影響。
缺點:沒辦法獲取檔案的層級關係,對程式設計師而言獲取資料比較麻煩。 */
1. 獲取檔案路徑
// nsstring * filepath = [[nsbundle mainbundle]pathforresource:@"teacher" oftype:@"xml"];
//
2.從檔案中讀取二進位製流
// nsdata * data = [nsdata datawithcontentsoffile:filepath];
// 3.建立xmlparser物件
// nsxmlparser * parser = [[nsxmlparser alloc]initwithdata:data];
4.設定**
// parser.delegate = self;
5.開始解析
// [parser parse];
#pragma mark- nsxmlparserdelegate
//遇到開標籤得方法 -(
void
)parser:(
nsxmlparser
*)parserdidstartelement:(
nsstring
*)elementnamenamespaceuri:(
nsstring
*)namespaceuriqualifiedname:(
nsstring
*)qnameattributes:(
nsdictionary
*)attributedict
//取值 -(
void
)parser:(
nsxmlparser
*)parserfoundcharacters:(
nsstring
*)string
//遇到關標籤 -(
void
)parser:(
nsxmlparser
*)parserdidendelement:(
nsstring
*)elementnamenamespaceuri:(
nsstring
*)namespaceuriqualifiedname:(
nsstring
*)qname {
nslog
(@"end---------%@"
,elementname); }
**************************************
/*** dom解析:一次性讀入整個文件進行解析。
優點:1.一次性將整個文件讀入時,會將資料的解析結構記錄下來,有利於程式設計師分析資料。
2 .xml檔案出錯會立即發現
缺點:由於一次性讀入整個文件,對記憶體消耗比較大。同時優點也是缺點即xml檔案出現錯誤就不能解析資料
dom原理是:遇到開標籤進棧,遇到關標籤出棧
借助gdataxmlnode來解析 */
// 1.獲取檔案路徑
nsstring
* filepath = [[
nsbundle
mainbundle
]pathforresource
:@"teacher.xml"
oftype
:nil];
// 2.獲取檔案內容
nsstring
* str = [
nsstring
stringwithcontentsoffile
:filepath
encoding
:(nsutf8stringencoding
)error
:nil];
// 3.轉換為xmldocument。(當執行完這一步時,整個文件已經被解析完畢,並且轉換為xmldoucment進行儲存。同時文件對應的樹形也已經清晰)
gdataxmldocument
*document = [[
gdataxmldocument
alloc
]initwithxmlstring
:str
options:0
error
:nil];
第一種方式:不斷地找子節點來獲取資料
1.獲取根節點
// gdataxmlelement * rootelement = document.rootelement;
nslog(@"%@",rootelement);
2.獲取根節點的子節點
// nsarray * array = [rootelement children];
nslog(@"%@",array);
3.獲取對應的所有子節點
// nsarray * arrayelement = [array[1] children];
nslog(@"%@",arrayelement);
4.獲取***節點
// nsstring * string = [arrayelement[1] stringvalue];
// nslog(@"%@",string);
// 第二種方式:使用elementforname:方法,給出乙個節點對應的名字獲取節點對應的資料
// //1.獲取根節點
// gdataxmlelement * rootelement = [document rootelement];
2.通過elementforname獲取資料
// nsarray * array = [rootelement elementsforname:@"teacher"];
3.從陣列中找到對應的節點
// gdataxmlelement * shengchenelement = array[1];
4.通過elementforname:方法獲取***
// nsarray * ***array = [shengchenelement elementsforname:@"***"];
// nsstring * string = [***array[0] stringvalue ];
// nslog(@"%@",string);
//
第三種方式;通過絕對路徑獲取對應的資料
// nsarray * nodearray = [ document nodesforxpath:@"teachers/teacher/***" error:nil];
nslog(@"%@",nodearray);
// nsstring * string = [nodearray[1] stringvalue];
// nslog(@"%@",string);
// 第四種方式:通過相對路徑查詢資料(***都會找到無論在哪個節點)
// nsarray * nodesarr = [document nodesforxpath:@"//***" error:nil];
// nsarray * nodesarr = [document nodesforxpath:@"///teacher/***" error:nil];
// nslog(@"%@",[nodesarr[1] stringvalue]);
iOS開發之XML解析
最近用到網路請求,整理一下。資料結構 inte ce viewcontroller property nonatomic,strong nsmutablearray datalist 拼接字串 property nonatomic,strong nsmutablestring elementstri...
IOS 開發 XML解析
先提供乙個測試介面 xml介面 這個是全國天氣的根節點,列出所有的省,其中的pyname欄位是各個省xml的檔名,比如北京的是beijing,那就意味著北京的xml位址為 乙個省的天氣,其中列出該省各個市的資料,北京就列出各個區。tmp1是最低溫低,tmp2是最高溫度,url非常重要,我們一會兒再說...
IOS開發 GDataXML解析XML
對於xml解析,只想說一句話,千萬別用系統自帶的解析器,否則,你會死的很慘!gdataxmlparser是乙個對xml具有良好操作的第三方庫。解析的方法如下 步驟 一 加入libxml2.dylib框架。二 設定search paths中header search paths為 usr includ...