欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中對xml文件解析的3種方式總結(jié)

 更新時間:2018年02月25日 11:11:04   作者:uniapp  
這篇文章主要給大家介紹了關(guān)于Android中對xml文件解析的3種方式,分別是 Dom 、 SAX 和 dom4j,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。

前言

xml 是數(shù)據(jù)傳輸?shù)囊环N格式,Android 中的布局文件、設(shè)置文件等都采用它來表示。Android 中對 xml 文件的解析也有多種方式,下面介紹常用的 3 種方式: Dom 、 SAX 和 dom4j。下面話不多說了,來一起看看詳細的介紹吧。

先看一個簡單的 xml 文件:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <書 出版社="駿馬">
 <書名>如何成功</書名>
 <作者>uniapp</作者>
 <售價>666</售價>
 </書>
 <書>
 <書名>如何成功1</書名>
 <作者>uniapp</作者>
 <售價>1991</售價>
 </書>
</書架>

1、Dom解析方式

Dom 解析通過 Document 類將整個 xml 文件一次讀入內(nèi)存,然后通過操作 Document 實例的屬性實現(xiàn)對 xml 文件中元素的增刪改查,具體代碼如下:

2 SAX解析

SAX 對 xml 文件采用邊讀邊解析的方式,就像我們用眼睛讀文章一樣,一行一行的進行。相比 Dom 方式產(chǎn)生的瞬時內(nèi)存峰值,SAX 對內(nèi)存的消耗比較平穩(wěn)。它通過解析類提供對外接口,具體實現(xiàn):

public class SaxDemo {
 @Test
 public void main() throws ParserConfigurationException, SAXException, IOException{
 //工廠類實例
 SAXParserFactory fac = SAXParserFactory.newInstance();
 //創(chuàng)建解析器
 SAXParser parser = fac.newSAXParser();
 //解析文檔
 XMLReader reader = parser.getXMLReader();
 reader.setContentHandler(new MyDefultHandle());
 reader.parse("./app/src/main/java/test/DTD.xml");

 }
}

class MyDefultHandle extends DefaultHandler{

 @Override
 public void startDocument() throws SAXException {
 super.startDocument();

 System.out.println("文檔開始");
 }

 @Override
 public void endDocument() throws SAXException {
 super.endDocument();
 System.out.println("文檔結(jié)束");
 }

 private boolean isPrice = false;
 @Override
 public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
 super.startElement(uri, localName, qName, attributes);
 System.out.println("元素開始: " + qName);

 }

 @Override
 public void endElement(String uri, String localName, String qName) throws SAXException {
 super.endElement(uri, localName, qName);

 if ("售價".equals(qName)){
  isPrice = false;
 }
 System.out.println("元素結(jié)束: " + qName);

 }

 @Override
 public void characters(char[] ch, int start, int length) throws SAXException {
 super.characters(ch, start, length);
 if (isPrice){
  System.out.println("內(nèi)容: " + new String(ch, start, length));
 }
 }
}

3 Dom4j 解析

Dom4j 解析是第三開源庫給出的解析方式,結(jié)合了 Dom 和 SAX 雙方的優(yōu)點,對 xml 文件逐步讀入內(nèi)存,并且可以采用面向?qū)ο蟮姆绞皆L問節(jié)點。代碼如下:

/**
 * 讀取屬性值
 * */
 public void readAttr() throws DocumentException {
 Document doc = getDocument();
 List<Element> list = doc.getRootElement().elements("書");
 for (int i = 0; i < list.size(); i++) {
  Element el = (Element) list.get(i);
  Attribute att = el.attribute("出版社");
  System.out.print("結(jié)果: " + att.getName() + att.getValue());
 }
 }

 /**
 * 讀取節(jié)點
 * */
 public void read() throws DocumentException {
 /**
  * 不能越級獲取值
  * */
 Document doc = getDocument();
 org.dom4j.Element el = doc.getRootElement();
 Element firstEl = el.element("書");
 Element firstBookEl = firstEl.element("書名");

 String name = firstBookEl.getText();
 System.out.println("書名: " + name);
 }

 public void update() throws DocumentException, IOException {
 Document doc = getDocument();
 List<Element> list = doc.getRootElement().elements("書");
 Element element = list.get(0);
 Element priceEl = element.element("售價");
 priceEl.setText("888元");
 XMLWriter writer = new XMLWriter(new FileOutputStream("./app/src/main/java/test/Dom4j3.xml"));
 writer.write(doc);
 }

 /**
 * 刪除節(jié)點
 * */
 public void deletePrice() throws Exception{
 SAXReader reader = new SAXReader();
 Document doc = reader.read("./app/src/main/java/test/Dom4j1.xml");
 Element el = (Element) doc.getRootElement().elements("書").get(1);
 Element elPrice = (Element) el.elements("售價").get(1);
 elPrice.getParent().remove(elPrice);
 XMLWriter writer = new XMLWriter(new FileOutputStream("./app/src/main/java/test/Dom4j2.xml"));
 writer.write(doc);
 writer.close();
 }
 /**
 * 增加節(jié)點
 * */
 public void addEl() throws DocumentException, IOException {
 Document doc = getDocument();
 Element el = (Element) doc.getRootElement().elements("書").get(1);
 el.addElement("售價").setText("6.66元");
 XMLWriter writer = new XMLWriter(new FileOutputStream("./app/src/main/java/test/Dom4j1.xml"));
 writer.write(doc);
 writer.close();
 }

 private Document getDocument() throws DocumentException {
 SAXReader reader = new SAXReader();
 return reader.read("./app/src/main/java/test/DTD.xml");
 }

結(jié)合以上三種解析方式的特點,我們可以得出結(jié)論:如果 xml 文件很小,可以選擇面向?qū)ο蟮?Dom 或者 dom4j 方式;反之可以選擇 SAX 方式,一面實際內(nèi)存不足造成閃退。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Android studio 生成帶Kotlin文檔的實現(xiàn)方式

    Android studio 生成帶Kotlin文檔的實現(xiàn)方式

    這篇文章主要介紹了Android studio 生成帶Kotlin文檔的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Android 實現(xiàn)電話來去自動錄音的功能

    Android 實現(xiàn)電話來去自動錄音的功能

    本文主要介紹Android 電話自動錄音功能的開發(fā),這里提供實現(xiàn)代碼和實現(xiàn)效果圖,有需要的小伙伴可以參考下
    2016-08-08
  • Android中Bitmap用法實例分析

    Android中Bitmap用法實例分析

    這篇文章主要介紹了Android中Bitmap用法,結(jié)合實例形式分析了Android操作圖片的載入、屬性設(shè)置、旋轉(zhuǎn)等相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android仿QQ左滑刪除置頂ListView操作

    Android仿QQ左滑刪除置頂ListView操作

    這篇文章主要為大家詳細介紹了Android仿QQ左滑刪除置頂ListView操作,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 詳解android 通過uri獲取bitmap圖片并壓縮

    詳解android 通過uri獲取bitmap圖片并壓縮

    這篇文章主要介紹了詳解android 通過uri獲取bitmap圖片并壓縮的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解這部分內(nèi)容,需要的朋友可以參考下
    2017-10-10
  • Android startService的使用與Service生命周期案例詳解

    Android startService的使用與Service生命周期案例詳解

    這篇文章主要介紹了Android startService的使用與Service生命周期案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 解決Eclipse創(chuàng)建android項目無法正常預覽布局文件問題的方法

    解決Eclipse創(chuàng)建android項目無法正常預覽布局文件問題的方法

    這篇文章主要介紹了解決Eclipse創(chuàng)建android項目無法正常預覽布局文件問題的方法,需要的朋友可以參考下
    2015-12-12
  • Android入門之SubMenu的實現(xiàn)詳解

    Android入門之SubMenu的實現(xiàn)詳解

    這篇文章主要為大家詳細介紹了Android如何實現(xiàn)SubMenu子菜單的效果,文中的示例代碼講解詳細,對我們學習Android有一定的幫助,感興趣的可以了解一下
    2022-11-11
  • Android使用ListView實現(xiàn)滾輪的動畫效果實例

    Android使用ListView實現(xiàn)滾輪的動畫效果實例

    這篇文章主要介紹了Android使用ListView實現(xiàn)滾輪的動畫效果實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Android Handler機制詳解原理

    Android Handler機制詳解原理

    Handler主要用于異步消息的處理:當發(fā)出一個消息之后,首先進入一個消息隊列,發(fā)送消息的函數(shù)即刻返回,而另外一個部分在消息隊列中逐一將消息取出,然后對消息進行處理,也就是發(fā)送消息和接收消息不是同步的處理。 這種機制通常用來處理相對耗時比較長的操作
    2021-11-11

最新評論