IOS中的XML解析之DOM和SAX

2021-07-03 11:30:42 字數 2844 閱讀 8002

一、介紹

dom是w3c指定的一套規範標準,核心是按樹形結構處理資料,dom解析器讀入xml檔案並在記憶體中建立乙個結構一模一樣的「樹」,這樹各節點和xml各標記對應,通過操縱此「樹」來處理xml中的檔案。xml檔案很大時,建立的「樹」也會大,所以會大量占用記憶體。

sax解析器核心是事件處理機制。例如解析器發現乙個標記的開始標記時,將所發現的資料會封裝為乙個標記開始事件,並把這個報告給事件處理器,事件處理器再呼叫方法(startelement)處理發現的資料。下面我們嘗試一下sax和dom解析:

xml格式如下:

二、sax:

1、我們用sax解析的時候用的是蘋果自帶的nsxmlparser,首先初始化乙個解析器,通過設定**開始解析,**如下:

//初始化路徑

nsstring * path=[[nsbundle mainbundle] pathforresource:@"test.xml" oftype:nil];

nsdata * data=[nsdata datawithcontentsoffile:path];

//初始化解析器

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

//設定**

parser.delegate=self;

//開始解析

[parser parse];

2、通過**方法開始解析,由於sax方式是事件驅動,因此解析是按照順序解析,如果想獲取標籤的資料我們需要監控每個步驟的解析情況,因此系統提供了**方法給我們,下面便是常用**方法:

//開始載入文件

- (void)parserdidstartdocument:(nsxmlparser *)parser{}

//結束載入文件

- (void)parserdidenddocument:(nsxmlparser *)parser

//開始解析標籤

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

//標籤解析結束

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

//讀取標籤之間的文字

- (void)parser:(nsxmlparser *)parser foundcharacters:(nsstring *)string

3、xm有兩種存值方式,乙個是屬性,乙個是標籤之間的文字。如果我們想獲取屬性需要在**方法中獲取,如圖:

如果是獲取標籤之間的文字需要採用**方法如圖:

總結:通過給定**方法的結合我們便可以輕鬆的獲取xml的內容

三、dom

1、我們用dom解析的時候用的是第三方框架gdataxmlnode,該框架為動態庫。我們需要引入如下:

同時需要引入第三方支援框架:

dom解析相對於sax稍微簡單一些,dom 首先將整個檔案全部放入記憶體。然後在記憶體中以二叉樹的形式獲取裡面的元素內容。

涉及到的主要類:

gdataxmldocument //整個文件

gdataxmlelement  //節點物件

gdataxmlnode     //屬性節點物件

我們可以用以下方法解析資料

//初始化

//將檔案加入到記憶體

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

//獲取根元素

gdataxmlelement * root=document.rootelement;

//獲取所有該名稱的子節點

-(nsarray *)elementsforname:(nsstring *)name;

//根據名稱獲取屬性值

-(gdataxmlnode*)attributeforname:(nsstring *)name;

這樣我們便可以輕鬆解析並且獲取xml的值了,如圖:

,親自執行測試。

疑問諮詢或技術交流,**入官方qq群:

傑瑞教育

出處:

本文版權歸煙台傑瑞教育科技****

XML解析之DOM解析

一開始我也不會,就找資料,這種資料多的要命,一搜一大堆,眼花繚亂的,沒看到滿意的。反正要掌握的,何不多寫寫,別人寫的大多數是針對某個xml進行解析的,我不喜歡這樣,太麻煩。以下 基本上可以解析平常xml格式的內容了,不需要怎麼改動 首先獲取dom解析最重要的工廠類,通過工廠類獲取解析xml用到的物件...

XML檔案解析之DOM解析

1.xml概念 xml 可擴充套件標誌語言 extensible markup language 1 是一種很像超文字標記語言 html 的標記語言 2 它的設計宗旨是傳輸和儲存資料,而不是顯示資料 html是用來顯示資料 3 最大特點是 它的標籤沒有被預定義 2.dom解析思路 dom解析xml時...

xml的解析和JAXP的dom解析

問題 xml的解析方式有哪些?dom和sax的區別 答 dom解析方式 把xml文件全部載入到記憶體中,形成樹狀結構 缺點 如果文件過大,容易產生記憶體溢位問題 優點 可以做增刪改的操作 sax解析方式 邊讀邊解析,基於事件驅動 優點 不會產生記憶體溢位的問題 缺點 不能做增刪改的操作,查詢速度非常...