Android利用Document實(shí)現(xiàn)xml讀取和寫入操作
本文實(shí)例為大家分享了利用Document實(shí)現(xiàn)xml讀取和寫入操作,供大家參考,具體內(nèi)容如下
首先先來介紹一下什么xml?xml是可擴(kuò)展標(biāo)記語言,他可以用來標(biāo)記數(shù)據(jù),定義數(shù)據(jù)類型。是一種允許用戶對自己標(biāo)記語言進(jìn)行定義的源語言。解析XML文件的方法有很多方法:dom解析,就是document以及PULL和SAX方法。今天給大家分享一下如何用Document來操作XML。
效果圖:
首先先對布局文件進(jìn)行操作:activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.oak.d3_xml.MainActivity"> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="生成" android:id="@+id/bt_create"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="讀取" android:id="@+id/bt_read"/> </LinearLayout>
主代碼:MainActivity.java: 值得注意的是Document類中的包要導(dǎo)W3C的包
package com.oak.d3_xml; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; public class MainActivity extends AppCompatActivity { private TextView textView;//用于展示讀取xml的內(nèi)容 private Button bt_create;//用于創(chuàng)建xml文件 private Button bt_read;//用于讀取xml文件 private File file;//xml文件路徑 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); file = new File(getFilesDir(),"languages.xml");//獲取到xml文件 textView = (TextView) findViewById(R.id.tv);//拿到textView控件 bt_create = (Button) findViewById(R.id.bt_create);//拿到創(chuàng)建按鈕 bt_read = (Button) findViewById(R.id.bt_read);//拿到讀取按鈕 bt_create.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //這里利用的是dom對xml進(jìn)行操作的 //實(shí)例化一個(gè)DocmentBuilderFactory,調(diào)用其靜態(tài)方法獲取 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); try { //實(shí)例化一個(gè)DocumentBuilder DocumentBuilder builder = builderFactory.newDocumentBuilder(); //實(shí)例化一個(gè)xml文件 Document newxml = builder.newDocument(); //創(chuàng)建一個(gè)根標(biāo)簽 Element languages = newxml.createElement("languages"); //為其設(shè)置屬性 languages.setAttribute("cat","it"); //for循壞3次,分別創(chuàng)建出三個(gè)標(biāo)簽,每個(gè)標(biāo)簽都包含內(nèi)容 for (int i=0;i<3;i++){ //創(chuàng)建languages的子標(biāo)簽lan Element lan = newxml.createElement("lan"); //設(shè)置屬性 lan.setAttribute("id",i+""); //創(chuàng)建lan的子標(biāo)簽 Element name = newxml.createElement("name"); //設(shè)置內(nèi)容 name.setTextContent("Java"+i); //創(chuàng)建lan的子標(biāo)簽 Element ide = newxml.createElement("ide"); //設(shè)置內(nèi)容 ide.setTextContent("Eclipse"+i); //將name和ide分別加入lan這個(gè)標(biāo)簽中 lan.appendChild(name); lan.appendChild(ide); //將lan將入languages標(biāo)簽中 languages.appendChild(lan); } //將languages加入到xml文件中 newxml.appendChild(languages); //實(shí)例化Transformer工廠 TransformerFactory transformerFactory = TransformerFactory.newInstance(); //獲取到Transformer Transformer transformer = transformerFactory.newTransformer(); //設(shè)置輸出格式 transformer.setOutputProperty("encoding","UTF-8"); //設(shè)置輸出流 OutputStream os = new FileOutputStream(file); //將文件寫出 transformer.transform(new DOMSource(newxml),new StreamResult(os)); Toast.makeText(getApplicationContext(),"生成成功",Toast.LENGTH_SHORT).show(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (TransformerConfigurationException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } }); bt_read.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //獲取到DocumentBuilder的工廠實(shí)例化 DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); try { //拿到DocumentBuilder DocumentBuilder builder = builderFactory.newDocumentBuilder(); //解析xml文件 Document xml = builder.parse(file); //獲取其根標(biāo)簽 Element languages = xml.getDocumentElement(); //根據(jù)子標(biāo)簽進(jìn)行查找,返回的是一個(gè)list集合 NodeList list = languages.getElementsByTagName("lan"); textView.setText("");//將textView中的內(nèi)容置空 for (int i=0; i<list.getLength(); i++){ //獲取到子標(biāo)簽lan Element lan = (Element) list.item(i); //獲取到他的屬性 String id = lan.getAttribute("id"); //獲取到他的子標(biāo)簽name的內(nèi)容 String name = lan.getElementsByTagName("name").item(0).getTextContent(); //獲取到他的子標(biāo)簽ide的內(nèi)容 String ide = lan.getElementsByTagName("ide").item(0).getTextContent(); //顯示到textView中 textView.append(id+"\n"+name+"\n"+ide+"\n"); } } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); } }
到這里利用Document來操作XML文件就完成了。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android多功能時(shí)鐘開發(fā)案例(基礎(chǔ)篇)
這篇文章主要為大家詳細(xì)介紹了Android多功能時(shí)鐘開發(fā)案例的基礎(chǔ)知識,為開發(fā)Android時(shí)鐘打下基礎(chǔ),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05Android定時(shí)器實(shí)現(xiàn)定時(shí)執(zhí)行、重復(fù)執(zhí)行、定時(shí)重復(fù)執(zhí)行、定次數(shù)執(zhí)行的多種方式
今天小編就為大家分享一篇關(guān)于Android定時(shí)器實(shí)現(xiàn)定時(shí)執(zhí)行、重復(fù)執(zhí)行、定時(shí)重復(fù)執(zhí)行、定次數(shù)執(zhí)行的多種方式,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12Android實(shí)現(xiàn)語音數(shù)據(jù)實(shí)時(shí)采集、播放
這篇文章主要介紹了android實(shí)現(xiàn)語音數(shù)據(jù)實(shí)時(shí)采集、播放的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12Android基礎(chǔ)之獲取LinearLayout的寬高
LinearLayout是線性布局控件,它包含的子控件將以橫向或豎向的方式排列,按照相對位置來排列所有的widgets或者其他的containers,超過邊界時(shí),某些控件將缺失或消失。有的時(shí)候,我們需要想獲取LinearLayout寬高,下面通過這篇文章來跟著小編一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11Android三方依賴沖突Gradle中exclude的使用
這篇文章主要介紹了Android三方依賴沖突Gradle中exclude的使用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09Android Studio設(shè)置或修改Android SDK路徑方法
在本篇文章中小編給大家整理了關(guān)于Android Studio設(shè)置或修改Android SDK路徑方法和相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。2019-04-04