Android读写XML(上)
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。當解析器發現元素開始、元素結束,文本、文檔的開始或者結束時,發送事件,在程序中編寫響應這些事件的代碼,其特點如下:
- 優點:不用事先調入整個文檔,占用資源少。尤其在嵌入式環境中,極力推薦采用SAX進行解析XML文檔。
- 缺點:不像DOM一樣將文檔長期駐留在內存,數據不是持久的,事件過后,如沒有保存數據,那么數據就會丟失。
- 使用場合:機器性能有限,尤其是在嵌入式環境,如Android,極力推薦采用SAX進行解析XML文檔。
大多數時間,使用 SAX 是比較安全的,并且 Android 提供了一種傳統的 SAX 使用方法,以及一個便捷的 SAX 包裝器。如果XML文檔比較小,那么 DOM 可能是一種比較簡單的方法。如果XML文檔比較大,但只需要文檔的一部分,則 XML Pull 解析器可能是更為有效的方法。最后對于編寫 XML,Pull 解析器包也提供了一種便捷的方法,詳細說明請閱讀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文件的讀寫只是基礎,相信在以后的網絡、數據庫的開發中會經常使用。
轉載于:https://www.cnblogs.com/gaoyoubo/articles/1856675.html
總結
以上是生活随笔為你收集整理的Android读写XML(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个特殊好听的中草药名字
- 下一篇: 拖动无标题窗体