XML解析方案

2022-08-05 17:21:16 字數 2201 閱讀 4116

在ios中,解析xml的手段有很多

蘋果原生

nsxmlparser:sax方式解析,使用簡單

第三方框架

libxml2:純c語言,預設包含在ios sdk中,同時支援dom和sax方式解析

gdataxml:dom方式解析,由google開發,基於libxml2

xml解析方式的選擇建議

大檔案:nsxmlparser,libxml2

小檔案:gdataxml,nsxmlparser,libxml2

1.使用nsxmlparser進行解析

//建立xml解析器

nsxmlparser *parser = [[nsxmlparser alloc] initwithdata:data];

//設定**

parser.delegate = self;

//開始解析xml(阻塞式的)

[parser parse];

需要實現nsxmlparserdelegate**

開始解析xml文件

- (void)parserdidstartdocument:(nsxmlparser *)parser;

xml文件解析完畢

- (void)parserdidenddocument:(nsxmlparser *)parser;

解析到某個元素的開頭

- (void)parser:(nsxmlparser *)parser didstartelement:(nsstring *)elementname namespaceuri:(nullable nsstring *)namespaceuri qualifiedname:(nullable nsstring *)qname attributes:(nsdictionary*)attributedict;

解析到某個元素的結尾

- (void)parser:(nsxmlparser *)parser didendelement:(nsstring *)elementname namespaceuri:(nullable nsstring *)namespaceuri qualifiedname:(nullable nsstring *)qname;

我們一般在第三個**方法(解析到某個元素的開頭)進行資料的處理

if ([elementname isequaltostring:@"root"]) 

//利用mjextension框架將屬性字典轉換成模型

ddzvideo *video = [ddzvideo mj_objectwithkeyvalues:attributedict];

[self.videos addobject:video];

2.使用gdataxml進行解析

因為gdataxml不能使用cocoapods進行載入,

所以我們需要將gdataxml這個資料夾匯入到專案中。

匯入之後需要進行一些設定,否則將報錯

// libxml includes require that the target header search paths contain

//// /usr/include/libxml2

//// and other linker flags contain

//// -lxml2

1.在build settings中

往header search paths新增

/usr/include/libxml2
2.在build settings中

往other linker flags新增

-lxml2

3.將專案設定成arc與mrc混編

//載入整個文件

gdataxmldocument *doc = [[gdataxmldocument alloc] initwithdata:data options:0 error:nil];

//獲得所有video元素

nsarray *elements = [doc.rootelement elementsforname:@"video"];

for (gdataxmlelement *ele in elements)

xml解析

最近的一個專案,呼叫第三方的介面來獲取資料並呈現,第三方介面收發的資料採用xml格式,返回的xml有點讓人蛋疼,可讀性差,語義破碎。這使得本...

xml解析

一,xml檔案解析 1 在介面呼叫中返回值有時返回的是xml格式的字串 二,解析 1 把返回的字串轉換成document 2 獲取內容 im...

php解析xml

php解析xml有很多種辦法,文件中有,搜尋一下就一大把的。 今天遇到一個需求 將某個xml中的節點屬性提取出來,然後更新資料庫某一表中的欄...