轉載自 這裡
前言 :
這篇文章使用 SAX 來解析 XML 格式文件. 在 Android SDK 開發環境跟 XML 有關的方法有 SAX 與 DOM 兩種. 使用 DOM 解析器在開始工作前會先載進整個文件到記億體, 而在手機或終端裝置記億體比較嚴苛環境下往往會造成拖慢速度或記憶體不足的元凶. 使用 DOM 的好處是相對於 SAX 來講, 在解析文件時可以寫相對少的代碼. 但這裡我們的範例將使用 SAX, 原因是我們的開發環境對記億體較講究, 且使用 SAX 我們可以客制需要解析文件的部分並過濾不需要的相關訊息來加快處理的速度.
使用 XML SAX Parser :
考慮我們有 XML 檔案內容如下 :
接著我們要在 Activity 中處理該 xml 檔案, 首先我們要定義一個類別 Data 來存放我們解析出 XML 檔中有興趣的欄位或訊息 :
接著 SAX (參考 XMLReader) 支援從 URI 直接 Streaming 動態解析 XML 或是從檔案讀取 XML 內容進行解析. 這裡我們因為將 xml 存放與檔案中, 故使用第二種方法. 在解析之前我們還必須定義一個類別或 Handler (DataHandler). 用來當作 XMLReader 的回呼函式. 在回呼函式中每當 Parser 解析完一個 Document 或 Element 便會透過對應的回呼函式 ( startElement() , endElement() etc ) 通知我們進行處理, 這時我們便可以取出有興趣的 Element 並過濾掉不需要的 Element. 而該類別或 Handler 需繼承 DefaultHandler 類別. 相關代碼如下 :
最後要做的就是在 Activity 類別使用上述客製化過的類別與 SAX 套件來處理 XML 解析, 部分代碼如下 :
上面代碼首先透過Singleton模式 SAXParserFactory.newInstance() 取的 SAX Parser 的工廠並接著取得 XMLReader. 接著將剛剛我們撰寫的 Handle/回呼函式 傳進去當作解析過程中抽取我們有興趣的訊息. 解析完畢後, 我們並透過 Handler (DataHandler) 的函式 getData() 取回剛剛我們用來存放有興趣資訊的類別, 最後一步便是根據需求來處理這些資訊. (例如如果有 GUI, 便可以使用 TextView.setText() 將之顯示出來).
補充說明 :
* android xml parser 如何從網路下載XML並解析
* Android XML Parsing Tutorial – Using DOMParser
前言 :
這篇文章使用 SAX 來解析 XML 格式文件. 在 Android SDK 開發環境跟 XML 有關的方法有 SAX 與 DOM 兩種. 使用 DOM 解析器在開始工作前會先載進整個文件到記億體, 而在手機或終端裝置記億體比較嚴苛環境下往往會造成拖慢速度或記憶體不足的元凶. 使用 DOM 的好處是相對於 SAX 來講, 在解析文件時可以寫相對少的代碼. 但這裡我們的範例將使用 SAX, 原因是我們的開發環境對記億體較講究, 且使用 SAX 我們可以客制需要解析文件的部分並過濾不需要的相關訊息來加快處理的速度.
使用 XML SAX Parser :
考慮我們有 XML 檔案內容如下 :
接著我們要在 Activity 中處理該 xml 檔案, 首先我們要定義一個類別 Data 來存放我們解析出 XML 檔中有興趣的欄位或訊息 :
接著 SAX (參考 XMLReader) 支援從 URI 直接 Streaming 動態解析 XML 或是從檔案讀取 XML 內容進行解析. 這裡我們因為將 xml 存放與檔案中, 故使用第二種方法. 在解析之前我們還必須定義一個類別或 Handler (DataHandler). 用來當作 XMLReader 的回呼函式. 在回呼函式中每當 Parser 解析完一個 Document 或 Element 便會透過對應的回呼函式 ( startElement() , endElement() etc ) 通知我們進行處理, 這時我們便可以取出有興趣的 Element 並過濾掉不需要的 Element. 而該類別或 Handler 需繼承 DefaultHandler 類別. 相關代碼如下 :
最後要做的就是在 Activity 類別使用上述客製化過的類別與 SAX 套件來處理 XML 解析, 部分代碼如下 :
上面代碼首先透過Singleton模式 SAXParserFactory.newInstance() 取的 SAX Parser 的工廠並接著取得 XMLReader. 接著將剛剛我們撰寫的 Handle/回呼函式 傳進去當作解析過程中抽取我們有興趣的訊息. 解析完畢後, 我們並透過 Handler (DataHandler) 的函式 getData() 取回剛剛我們用來存放有興趣資訊的類別, 最後一步便是根據需求來處理這些資訊. (例如如果有 GUI, 便可以使用 TextView.setText() 將之顯示出來).
補充說明 :
* android xml parser 如何從網路下載XML並解析
* Android XML Parsing Tutorial – Using DOMParser
This message was edited 8 times. Last update was at 27/08/2011 22:59:45
DataHandler.java 第14行 好像是要 public Data getData() { 的樣子? 請幫忙確認看看 XD
回覆刪除已更正, 感謝提醒!!!
刪除