iOS開發之XML解析

2021-07-10 21:01:33 字數 3919 閱讀 3909

有如上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...