Android應(yīng)用中使用XmlSerializer序列化XML數(shù)據(jù)的教程
首先,我們看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是簡(jiǎn)單的把對(duì)象保存在存儲(chǔ)器上,它可以使我們?cè)诹髦袀鬏攲?duì)象,使對(duì)象變的可以像基本數(shù)據(jù)一樣傳遞。
XmlSerializer是針對(duì)XML進(jìn)行序列化的類庫(kù),我們先來(lái)看一下里面的常用方法:
基本方法
1.創(chuàng)建一個(gè)xml文件的序列化器,返回的是一個(gè)Xml的 Serializer 對(duì)象。
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 測(cè)試通過(guò)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對(duì)象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer xmlSerializer = factory.newSerializer();
// 設(shè)置輸出流對(duì)象
xmlSerializer.setOutput(stringWriter);
/*
* startDocument(String encoding, Boolean standalone)encoding代表編碼方式
* standalone 用來(lái)表示該文件是否呼叫其它外部的文件。
* 若值是 ”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)識(shí)xml標(biāo)簽
*XML 命名空間屬性被放置于某個(gè)元素的開始標(biāo)簽之中,并使用以下的語(yǔ)法:
xmlns:namespace-prefix="namespaceURI"
當(dāng)一個(gè)命名空間被定義在某個(gè)元素的開始標(biāo)簽中時(shí),所有帶有相同前綴的子元素都會(huì)與同一個(gè)命名空間相關(guān)聯(lián)。
注釋:用于標(biāo)示命名空間的地址不會(huì)被解析器用于查找信息。其惟一的作用是賦予命名空間一個(gè)惟一的名稱。不過(guò),很多公司常常會(huì)作為指針來(lái)使用命名空間指向某個(gè)實(shí)存的網(wǎng)頁(yè),這個(gè)網(wǎng)頁(yè)包含著有關(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)容易的。基本的步驟和解析xml差不多。這里就不多說(shuō)話了。詳情請(qǐng)看api。
相關(guān)文章
Android自定義View實(shí)現(xiàn)比賽時(shí)間閃動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)比賽時(shí)間閃動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03
解決EditText編輯時(shí)hint 在6.0 手機(jī)上顯示不出來(lái)的問(wèn)題
下面小編就為大家?guī)?lái)一篇解決EditText編輯時(shí)hint 在6.0 手機(jī)上顯示不出來(lái)的問(wèn)題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
android listview進(jìn)階實(shí)例分享
這篇文章主要介紹了android listview進(jìn)階實(shí)例分享,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Android仿微信清理內(nèi)存圖表動(dòng)畫(解決surfaceView屏幕閃爍問(wèn)題)demo實(shí)例詳解
本文通過(guò)實(shí)例代碼給大家講解android仿微信清理內(nèi)存圖表動(dòng)畫(解決surfaceView屏幕閃爍問(wèn)題)的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09
Android音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)案例
我們平時(shí)長(zhǎng)時(shí)間打代碼的時(shí)候肯定會(huì)感到疲憊和乏味,這個(gè)時(shí)候一邊播放自己喜歡的音樂(lè),一邊繼續(xù)打代碼,心情自然也愉快很多。音樂(lè)帶給人的聽覺享受是無(wú)可比擬的,動(dòng)聽的音樂(lè)可以愉悅?cè)说纳硇?,讓人更加積極地去熱愛生活,這篇文章主要介紹了Android音樂(lè)播放器簡(jiǎn)單實(shí)現(xiàn)案例2022-12-12
Android開發(fā)實(shí)現(xiàn)Switch控件修改樣式功能示例【附源碼下載】
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)Switch控件修改樣式功能,涉及Android Switch開關(guān)控件樣式設(shè)置與事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
Android Wifi的forget()操作實(shí)例詳解
這篇文章主要介紹了Android Wifi的forget()操作實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-02-02
Android 獲取IP地址的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 獲取IP地址的實(shí)現(xiàn)方法的相關(guān)資料,這里提供了具體實(shí)現(xiàn)的方法及代碼,使用WIFI 和GPRS的思路,需要的朋友可以參考下2016-11-11
使用PackageManager獲得應(yīng)用信息實(shí)例方法
PackageManager是Android中一個(gè)很有用的類,能夠獲取已安裝的應(yīng)用(包)的信息,如應(yīng)用名稱、圖標(biāo)、權(quán)限,安裝、刪除應(yīng)用(包)等2013-11-11

