Android應(yīng)用中使用XmlSerializer序列化XML數(shù)據(jù)的教程
首先,我們看一下什么是serializer,serializer就是串行化,又名序列化。它可并不只是簡單的把對象保存在存儲器上,它可以使我們在流中傳輸對象,使對象變的可以像基本數(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)容易的。基本的步驟和解析xml差不多。這里就不多說話了。詳情請看api。
相關(guān)文章
Android遠(yuǎn)程服務(wù)編寫和調(diào)用教程
這篇文章主要介紹了Android遠(yuǎn)程服務(wù)編寫和調(diào)用教程,本文教大家如何編寫或者調(diào)用Android的遠(yuǎn)程服務(wù),感興趣的小伙伴們可以參考一下2016-02-02
Android Studio 新建項(xiàng)目通過git上傳到碼云圖文教程詳解
本文通過圖文并茂的方式給大家介紹了Android Studio 新建項(xiàng)目通過git上傳到碼云的方法,需要的朋友可以參考下2017-11-11
Android中用Builder模式自定義Dialog的方法
在任何軟件操作系統(tǒng)中,Dialog即對話框都是一種重要的交互模式與信息載體,而Android系統(tǒng)本身的Dialog擁有固定的樣式,并且在5.0后采用Material Design設(shè)計(jì)風(fēng)格的Dialog美觀大氣。這篇文章將詳細(xì)介紹Android中用Builder模式自定義Dialog的方法,有需要的可以參考借鑒。2016-10-10
Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解
這篇文章主要為大家介紹了Android客戶端與服務(wù)端數(shù)據(jù)加密傳輸方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android Studio 3.6中新的視圖綁定工具ViewBinding 用法詳解
這篇文章主要介紹了Android Studio 3.6中新的視圖綁定工具ViewBinding 用法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03
Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條
這篇文章主要介紹了Android Shape屬性創(chuàng)建環(huán)形進(jìn)度條的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
詳解Android10的分區(qū)存儲機(jī)制(Scoped Storage)適配教程
這篇文章主要介紹了詳解Android10的分區(qū)存儲機(jī)制(Scoped Storage)適配教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Android開發(fā)中RecyclerView模仿探探左右滑動(dòng)布局功能
本文給大家分享android開發(fā)中RecyclerView模仿探探左右滑動(dòng)布局功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下2017-01-01

