ios中如何解析xml檔案
兩種方法:1.ios中已有的nsxmlparse類
2.google的gdataxml也是基於libxml2的,因此在使用gdataxml之前,你需要先
匯入libxml2。
這裡詳解ios中的nsxmlparse:
nsxmlparser 實現的是sax方法解析xml檔案。
dom實現的原理是把整個xml
文件一次性讀出,放在乙個樹型結構裡。在需要的時候,查詢特定節點,然後對節點進行讀或寫。他的主要優勢是實現簡單,讀寫平衡;缺點是比較佔記憶體,因為他要把整個xml
文件都讀入記憶體,檔案越大,這種缺點就越明顯。
sax的實現方法和dom
不同。他只在
xml文件中查詢特定條件的內容,並且只提取需要的內容。這樣做占用記憶體小,靈活,正好滿足我們的需求。他的缺點就是寫,有些資料介紹了寫入的方法,但是我感覺這對本例沒有必要。
執行nsxmlparser
涉及設定、執行和響應結果。
1)啟動nsxmlparser
要使用nsxmlparser
要先建立它,設定各種屬性,主要用到以下幾個方法:
initwithcontentsofurl 通
過nsurl建立解析器
initwithdata 通
過nsdata建立解析器
setdelegate 為解析器定義委託
parse 執行解析器
2)充當委託
最重要的5個方法:
//發現元素開始符的處理函式
(即報告元素的開始以及元素的屬性)
- (void)parser:(nsxmlparser *)parser
didstartelement:(nsstring *)elementname
namespaceuri:(nsstring *)namespaceuri
qualifiedname:(nsstring *)qname
attributes:(nsdictionary *)attributedict
//處理標籤包含內容字元
(報告元素的所有或部分內容)
- (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string
//發現元素結束符的處理函式,儲存元素各專案資料(即報告元素的結束標記)
- (void)parser:(nsxmlparser *)parser
didendelement:(nsstring *)elementname
namespaceuri:(nsstring *)namespaceuri
qualifiedname:(nsstring *)qname
//報告解析的結束
- (void)parserdidenddocument:(nsxmlparser *)parser
//報告不可恢復的解析錯誤
- (void)paser:parsererroroccured
1.申明了乙個xml處理協議,用到nsxmlparser協議,用來具體處理我們要解析的xml檔案,把需要的url取出來,存到指定的data裡。*/
//多執行緒處理類的定義,方法實現,與向主線程回傳data
@class
//@protocol parseoperationdelegate;
@protocol parseoperationdelegate
- (void)parseerroroccurred:(nserror *)error;
@end
@inte***ce parseoperation : nsoperation
- (id)initwithdata:(nsdata *)data delegate:(id
)thedelegate;
@end
然後完成協議的初始化函式
- (id)initwithdata:(nsdata *)data delegate:(id
)thedelegate
returnself; }
2.完成對特定標籤的解析
#pragma mark -
#pragma mark rss processing
- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname
namespaceuri:(nsstring *)namespaceuri
qualifiedname:(nsstring *)qname
attributes:(nsdictionary *)attributedict
storingcharacterdata= [elementstoparse
containsobject
:elementname]; }
3.找到具體的位址與內容,並存儲
- (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname
namespaceuri:(nsstring *)namespaceuri
qualifiedname:(nsstring *)qname
else
if ([elementname isequaltostring:knamestr])
else
if ([elementname isequaltostring:kimagestr])
else
if ([elementname isequaltostring:kartiststr])
}else
if ([elementname isequaltostring:kentrystr])}}
- (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string
}
最後,關於gg的xml解析,我沒有接觸到,可能會在以後不上來,謝謝。
iOS中xml檔案解析
xml檔案內容 id 1 jackname 2015personid 20age person id 2 rosename 2016personid 18age person id 3 tomname 2017personid 19age person id 4 jerryname 2018pers...
如何解析rdb檔案
相信大家也都或多或少的了解些redis,知道他是記憶體性nosql資料庫。那麼,疑問也就來了,這種記憶體型資料庫的資料在伺服器宕機後,資料還會恢復嗎?答案是會恢復的!因為這種記憶體型資料庫也存在它的持久化機制,下面是redis的rdb 持久化觸發條件 其含義如下 900秒內如果至少有1個key的值變...
vue如何解析xml檔案 x2js
好久沒來寫東西了,主要是一直在加班,哼哼,不開心 專案中會用到將xml檔案解析成json檔案在頁面中顯示出來,以前jq的時候用到的方法行不通了,故在這邊介紹一種我覺得還不錯的外掛程式 1.npm安裝 npm i x2js 2.在main.js中引用 import x2js from x2js xml...