Android讀寫XML(上)——package說明

來源:互聯網
上載者:User
文章目錄
  • 總結說明

註明:本文轉自http://www.moandroid.com.

 

XML 經常用作 Internet 上的一種資料格式,其檔案格式想必大家都比較清楚,在這裡我結合Android平台,來說明Android
SDK提供的讀寫XML的package。

首先介紹下Android SDK與Java SDK在讀寫XML檔案方面,資料包之間的關係。Android 平台最大的一個優勢在於它利用了
Java 程式設計語言。Android SDK 並未向標準 Java Runtime Environment (JRE)
提供一切可用功能,但它支援其中很大一部分功能。Java 平台支援通過許多不同的方式來使用 XML,並且大多數與 XML 相關的 Java API
在 Android 上得到了完全支援。舉例來說,Java 的 Simple API for XML (SAX) 和 Document
Object Model (DOM) 在 Android 上都是可用的,這些 API 多年以來一直都是 Java 技術的一部分,較新的
Streaming API for XML (StAX) 在 Android 中並不可用。但是, Android
提供了一個功能相當的庫。最後,Java XML Binding API 在 Android 中也不可用,這個 API 已確定可以在
Android 中實現。Android SDK提供了如下package來支援XML的讀寫:


功能介紹
javax.xml
根據 XML 規範定義核心 XML 常量和功能。
javax.xml.parsers
提供DOM和SAX方法解析XML文檔
org.w3c.dom
W3C提供的使用DOM方法讀取XML
org.xml.sax
提供核心SAX  APIs
org.xmlpull.v1

額外補充說明下,在android.util

據包中也提供了一個類Xml,不過這個類就是把以上package簡單封裝了下。

讀取XML主要有2種方法:DOM與SAX(Simple API for XML),在這裡對這2種方法分別加以說明。

DOM(文件物件模型),為XML文檔的解析定義了一組介面,解析器讀入整個文檔,然後構造一個駐留記憶體的樹結構,然後代碼就可以使用DOM介面來
操組整個樹結構,其他點如下:

  • 優點:整個文檔樹都在記憶體當中,便於操作;支援刪除、修改、重新排列等多功能。
  • 缺點:將整個文檔調入記憶體(經常包含大量無用的節點),浪費時間和空間。
  • 使用場合:一旦解析了文檔還需要多次訪問這些資料,而且資源比較充足(如記憶體、CPU等)。

為瞭解決DOM解析XML引起的這些問題,出現了SAX。SAX解析XML文檔為事件驅動,詳細說明請閱讀Android讀寫XML(中)–SAX" href="http://www.moandroid.com/?p=821" target="_blank">Android讀寫XML(中)–SAX
。當解析器發現元素開始、元素結束,文本、文檔的開始或者結束時,發送
事件,在程式中編寫響應這些事件的代碼,其特點如下:

  • 優點:不用事先調入整個文檔,佔用資源少。尤其在嵌入式環境中,極力推薦採用SAX進行解析XML文檔。
  • 缺點:不像DOM一樣將文檔長期駐留在記憶體,資料不是持久的,事件過後,如沒有儲存資料,那麼資料就會丟失。
  • 使用場合:機器效能有限,尤其是在嵌入式環境,如Android,極力推薦採用SAX進行解析XML文檔。

大多數時間,使用 SAX 是比較安全的,並且 Android 提供了一種傳統的 SAX 使用方法,以及一個便捷的 SAX
封裝器。如果XML文檔比較小,那麼 DOM 可能是一種比較簡單的方法。如果XML文檔比較大,但只需要文檔的一部分,則 XML Pull
解析器可能是更為有效方法。最後對於編寫 XML,Pull 解析器包也提供了一種便捷的方法,詳細說明請閱讀Android讀寫XML(下)——資料寫入XML文檔" href="http://www.moandroid.com/?p=868" target="_blank">Android讀寫XML(下)——資料寫入XML文檔
。因此,無論我們的 XML 需求如何,Android
都能在一定程度上滿足我們的需求。

下面我們詳細介紹採用DOM的方法,讀取XML文檔的思路,這基本上與XML的結構是完全一樣的。首先載入XML文檔(Document),然後獲
取文檔的根結點(Element),然後擷取根結點中所有子節點的列表(NodeList),然後使用再擷取子節點列表中的需要讀取的結點。根據以上思
路,簡要寫個讀取XML檔案的例子如下:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import android.content.Context;
void ReadXML()
{
DocumentBuilderFactory docBuilderFactory = null;
DocumentBuilder docBuilder = null;
Document doc = null;
try {
docBuilderFactory = DocumentBuilderFactory.newInstance();
docBuilder = docBuilderFactory.newDocumentBuilder();
//xml file 放到 assets目錄中的
doc =
docBuilder.parse(context.getResources().getAssets().open(”weather.xml”));
//root element
Element root = doc.getDocumentElement();
//Do something here
//get a NodeList by tagname
NodeList nodeList = root.getElementsByTagName(”tag”);
for(int i =0;i< nodeList.getLength();i++)
{
Node nd = nodeList.item(i);
//Read Node
}
} catch (IOException e) {
} catch (SAXException e) {
} catch (ParserConfigurationException e) {
} finally {
doc = null;
docBuilder = null;
docBuilderFactory = null;
}
}

以上代碼比較簡單,就不在此詳細解析了。

採用DOM讀取XML檔案,需要載入整個XML檔案,在XML檔案比較大的情況下,會導致Android裝置記憶體緊張,為了避免這個問題,也可以采
用SAX的方法讀取XML檔案,不過SAX對結點的排序、增加結點等方面的操作相比DOM就有些複雜了。根據XML檔案大小、資料處理的需求,選擇合適的
讀取的方法。

對於XML的寫入,一方面可以採用前面介紹的這些package;另外一方面也可以按照XML的標準,將資料以字串的形式直接寫入檔案,這也是種
很不錯的方法。在這裡推薦IBM開源社區中一篇比較好的文章 Android 上使用
XML
,有興趣的可以去深入學習下。

總結說明

XML作為一種簡單的檔案格式,作為網路上資料交換的基礎,而且得到了大部分資料庫的支援(直接將XML檔案插入資料庫),XML檔案的讀寫只是基
礎,相信在以後的網路、資料庫的開發中會經常使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.