Android應(yīng)用中使用XmlSerializer序列化XML數(shù)據(jù)的教程
首先,我們看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是簡單的把對象保存在存儲(chǔ)器上,它可以使我們在流中傳輸對象,使對象變的可以像基本數(shù)據(jù)一樣傳遞。
XmlSerializer是針對XML進(jìn)行序列化的類庫,我們先來看一下里面的常用方法:
基本方法
1.創(chuàng)建一個(gè)xml文件的序列化器,返回的是一個(gè)Xml的 Serializer 對象。
XmlSerializer = Xml.newSerializer();
2.設(shè)置序列化器的輸出路徑和編碼方式
FileOutputStream = new FileOutputStream(new File(Environment.getExternalStorageDirectory(),"文件名.xml")); XmlSerializer.setOutput(FileOutputStream, "編碼");
3.聲明xml文件頭(寫入XML文件中的聲明頭)
serializer.startDocument("xml聲明的編碼", 文檔是否獨(dú)立);
4.聲明子節(jié)點(diǎn)
Serializer.startTag(nameSpace,String "節(jié)點(diǎn)名");
5.聲明節(jié)點(diǎn)屬性
Serializer.attribute(命名空間,屬性名,屬性值);
6.聲明節(jié)點(diǎn)中的TextNode
Serializer.txt(文本值);
7.設(shè)置節(jié)點(diǎn)尾標(biāo)簽
Serializer.endTag(命名空間, "節(jié)點(diǎn)名");
8.寫Xml文件尾表示Xml文件結(jié)束。
Serializer.endDocument();
9.關(guān)閉資源
FileOutputStream.close();
示例
最終效果圖如上
現(xiàn)在粘貼主要代碼:
main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </LinearLayout>
activity的代碼
package cn.com.xmlseriliazer; import java.io.StringWriter; import java.util.ArrayList; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; /** * * @author chenzheng_java * @description 測試通過XmlSerilizer生成xml文件 * @since 2011/03/03 * */ public class XmlSerializerActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String result = produceXml(); TextView textView = (TextView)this.findViewById(R.id.textView); textView.setText(result); } /** * * @return 生成的xml文件的字符串表示 */ private String produceXml(){ StringWriter stringWriter = new StringWriter(); ArrayList<Beauty> beautyList = getData(); try { // 獲取XmlSerializer對象 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlSerializer xmlSerializer = factory.newSerializer(); // 設(shè)置輸出流對象 xmlSerializer.setOutput(stringWriter); /* * startDocument(String encoding, Boolean standalone)encoding代表編碼方式 * standalone 用來表示該文件是否呼叫其它外部的文件。 * 若值是 ”yes” 表示沒有呼叫外部規(guī)則文件,若值是 ”no” 則表示有呼叫外部規(guī)則文件。默認(rèn)值是 “yes”。 */ xmlSerializer.startDocument("utf-8", true); xmlSerializer.startTag(null, "beauties"); for(Beauty beauty:beautyList){ /* * startTag (String namespace, String name)這里的namespace用于唯一標(biāo)識xml標(biāo)簽 *XML 命名空間屬性被放置于某個(gè)元素的開始標(biāo)簽之中,并使用以下的語法: xmlns:namespace-prefix="namespaceURI" 當(dāng)一個(gè)命名空間被定義在某個(gè)元素的開始標(biāo)簽中時(shí),所有帶有相同前綴的子元素都會(huì)與同一個(gè)命名空間相關(guān)聯(lián)。 注釋:用于標(biāo)示命名空間的地址不會(huì)被解析器用于查找信息。其惟一的作用是賦予命名空間一個(gè)惟一的名稱。不過,很多公司常常會(huì)作為指針來使用命名空間指向某個(gè)實(shí)存的網(wǎng)頁,這個(gè)網(wǎng)頁包含著有關(guān)命名空間的信息。 */ xmlSerializer.startTag(null, "beauty"); xmlSerializer.startTag(null, "name"); xmlSerializer.text(beauty.getName()); xmlSerializer.endTag(null, "name"); xmlSerializer.startTag(null, "age"); xmlSerializer.text(beauty.getAge()); xmlSerializer.endTag(null, "age"); xmlSerializer.endTag(null, "beauty"); } xmlSerializer.endTag(null, "beauties"); xmlSerializer.endDocument(); } catch (Exception e) { e.printStackTrace(); } return stringWriter.toString(); } /** * * @return 包含了眾多美女信息的集合 */ private ArrayList<Beauty> getData(){ ArrayList<Beauty> beautyList = new ArrayList<Beauty>(); Beauty yangmi = new Beauty("楊冪", "23"); Beauty linzhiling = new Beauty("林志玲", "28"); beautyList.add(yangmi); beautyList.add(linzhiling); return beautyList; } /** * * @author chenzheng_java * 美人實(shí)體類 */ private class Beauty{ String name; String age ; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } @Override public String toString() { return "Beauty [age=" + age + ", name=" + name + "]"; } public Beauty(String name, String age) { this.name = name; this.age = age; } public Beauty(){ } } }
其他都為默認(rèn)。
由代碼我們可以看到,其實(shí)使用xmlserializer生成xml也是相當(dāng)容易的?;镜牟襟E和解析xml差不多。這里就不多說話了。詳情請看api。
相關(guān)文章
Android遠(yuǎn)程服務(wù)編寫和調(diào)用教程
這篇文章主要介紹了Android遠(yuǎn)程服務(wù)編寫和調(diào)用教程,本文教大家如何編寫或者調(diào)用Android的遠(yuǎn)程服務(wù),感興趣的小伙伴們可以參考一下2016-02-02Android Studio 新建項(xiàng)目通過git上傳到碼云圖文教程詳解
本文通過圖文并茂的方式給大家介紹了Android Studio 新建項(xiàng)目通過git上傳到碼云的方法,需要的朋友可以參考下2017-11-11Android中用Builder模式自定義Dialog的方法
在任何軟件操作系統(tǒng)中,Dialog即對話框都是一種重要的交互模式與信息載體,而Android系統(tǒng)本身的Dialog擁有固定的樣式,并且在5.0后采用Material Design設(shè)計(jì)風(fēng)格的Dialog美觀大氣。這篇文章將詳細(xì)介紹Android中用Builder模式自定義Dialog的方法,有需要的可以參考借鑒。2016-10-10Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
這篇文章主要為大家介紹了Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解
這篇文章主要介紹了Android Studio 3.6中新的視圖綁定工具ViewBinding 用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條
這篇文章主要介紹了Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11詳解Android10的分區(qū)存儲(chǔ)機(jī)制(Scoped Storage)適配教程
這篇文章主要介紹了詳解Android10的分區(qū)存儲(chǔ)機(jī)制(Scoped Storage)適配教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Android開發(fā)中RecyclerView模仿探探左右滑動(dòng)布局功能
本文給大家分享android開發(fā)中RecyclerView模仿探探左右滑動(dòng)布局功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01