亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android序列化XML數據

2020-04-11 12:01:09
字體:
來源:轉載
供稿:網友
什么是XML?
首先我們先了解一下什么是XML。XML,可擴展標記語言 (Extensible Markup Language) ,用于標記電子文件使其具有結構性的標記語言,可以用來標記數據、定義數據類型,是一種允許用戶對自己的標記語言進行定義的源語言,這是百度百科的解釋。而XML是一種在Internet中傳輸數據的常見格式,它與HTML一樣,都是SGML(標準通用標記語言),無論你是需要通過Internet訪問數據,或者發送數據給Web服務,都可能需要用到XML的知識。恰恰Android應用程序需要和網絡交互,否則只是一款單機的無互動的應用程序,所以很可能在Android應用程序開發的過程中使用到XML。
由于XML的擴展性強,致使它需要有穩定的基礎規則來支持擴展,該語法規則需要注意的是:
開始和結束標簽匹配。
嵌套標簽不能相互嵌套。
區分大小寫。

XML序列化
當獲取到一段數據后,如果需要把它序列化成XML的格式,通常有兩種辦法:
拼接字符串的形式序列化一個XML數據。
使用XmlSerializer類序列化一個XML數據。
使用拼接字符串的方式很簡單,就是個體力活,把需要序列化的對象,依照一定的格式序列化即可。下面通過一個示例講解來演示如何拼接字符串,在示例中模擬聯系人數據,然后對其進行序列化成XML,最后保存在SD卡上。
復制代碼 代碼如下:

private void backupToContact1(){
        StringBuilder sbuilder=new StringBuilder();
        // 設置XML的數據頭
        sbuilder.append("<?xml version=/"1.0/" encoding=/"utf-8/"?>");
        sbuilder.append("<contacts>");
        // 遍歷聯系人信息
        for(Contact contact:Contacts){
            if(contact!=null){
                sbuilder.append("<contact id='"+contact.getId()+"'>");
                sbuilder.append("<name>");
                sbuilder.append(contact.getName());
                sbuilder.append("</name>");

                sbuilder.append("<number>");
                sbuilder.append(contact.getNumber());
                sbuilder.append("</number>");

                sbuilder.append("<address>");
                sbuilder.append(contact.getAddress());
                sbuilder.append("</address>");

                sbuilder.append("</contact>");
            }
        }           
        sbuilder.append("</contacts>");
        try {
            // 在SD卡上創建一個xml文件
            File file=new File(Environment.getExternalStorageDirectory(),"backup1.xml");
            FileOutputStream fos=new FileOutputStream(file);
            // 把序列化的數據寫入到XML文件中
            fos.write(sbuilder.toString().getBytes());
            fos.close();
            Toast.makeText(MainActivity.this, "備份成功", 0).show();
        } catch (IOException e) {
            Toast.makeText(MainActivity.this, "備份失敗", 0).show();
            e.printStackTrace();
        }
    }

執行完之后,可以把SD卡上的XML文件導出到電腦上,查看其內容。
對于拼接字符串而言,可以看出,很容易出錯,尤其是每個標簽內如果還存在屬性值就更需要細心了。而且如果其內容存在特殊的符號,如“<、>”等,就會導致XML序列化后的XML文件出錯,而使用XmlSerializer來序列化XML文件就不存在這些問題。
下面介紹第二種方式,通過XmlSerializer類來序列化XML。那先了解一下XmlSerializer,XmlSerializer主要是是以數據流的形式序列化XML,而它是一個接口類型,無法直接實例化,需要通過一個靜態方法Xml.newSerializer()獲取對象。
以下是一些常用方法:
setOutput(OutputStream,String):設置輸出流,以及編碼格式。
startDocument(String,boolean):第一個參數設置文檔的編碼格式,第二個參數設置是否是一個獨立的文檔,一般設置為true。
endDocument():標記XML文檔的結束,XML文檔標簽均為成對出現,有始有終。
startTag(String,String):一個XML標簽的開始,第一個參數為命名空間,一般為null即可,第二個參數為標簽名。
endTag(String,String):一個XML標簽的結束,第一個參數為命名空間,一般為null即可,第二個參數為標簽名,有始有終。
attribute(String,String,String):設置一個標簽的屬性,第一個參數為命名空間,第二個參數是屬性名,第三個參數為屬性值。
上面已經介紹過了XmlSerializer的常用方法,下面通過一個示例來演示XmlSerializer的使用。在示例中實現的功能和上面拼接字符串序列化XML一致,都是序列化模擬的聯系人信息,然后以XML的格式保存在SD卡上。  
復制代碼 代碼如下:

private void backupToContact2(){
        try {
            // 在SD卡上創建一個文件
            File file=new File(Environment.getExternalStorageDirectory(),"backup2.xml");
            FileOutputStream fos=new FileOutputStream(file);
            // 獲取一個XmlSerializer
            XmlSerializer serializer = Xml.newSerializer();
            // 設置XML的輸出流以及編碼格式
            serializer.setOutput(fos,"utf-8");
            // 設置文檔的開頭,以及編碼格式
            serializer.startDocument("utf-8", true);

            // 開始標簽
            serializer.startTag(null, "contacts");
            for(Contact contact:Contacts){
                serializer.startTag(null, "contact");
                // 設置contact標簽的id屬性
                serializer.attribute(null, "id", contact.getId()+"");
                serializer.startTag(null, "name");
                serializer.text(contact.getName());
                serializer.endTag(null, "name");

                serializer.startTag(null, "number");
                serializer.text(contact.getNumber());
                serializer.endTag(null, "number");

                serializer.startTag(null, "address");
                serializer.text(contact.getAddress());
                serializer.endTag(null, "address");
                serializer.endTag(null, "contact");
            }
            // 一個結束標簽
            serializer.endTag(null, "contacts");
            // 標記文檔的結束
            serializer.endDocument();
            // 關閉輸出流
            fos.close();
            Toast.makeText(MainActivity.this, "備份成功", 0).show();
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(MainActivity.this, "備份失敗", 0).show();
        }       
    }

保存成功之后,可以通過File Explorer導出XML文件查看其內容,上面兩個示例序列化的XML文件一致,如下:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<contacts>
<contact id="0">
<name>Damon0</name>
<number>18600000000</number>
<address>beijing0</address>
</contact>
<contact id="1">
<name>Damon1</name>
<number>18600000001</number>
<address>beijing1</address>
</contact>
<contact id="2">
<name>Damon2</name>
<number>18600000002</number>
<address>beijing2</address>
</contact>
<contact id="3">
<name>Damon3</name>
<number>18600000003</number>
<address>beijing3</address>
</contact>
<contact id="4">
<name>Damon4</name>
<number>18600000004</number>
<address>beijing4</address>
</contact>
<contact id="5">
<name>Damon5</name>
<number>18600000005</number>
<address>beijing5</address>
</contact>
<contact id="6">
<name>Damon6</name>
<number>18600000006</number>
<address>beijing6</address>
</contact>
<contact id="7">
<name>Damon7</name>
<number>18600000007</number>
<address>beijing7</address>
</contact>
<contact id="8">
<name>Damon8</name>
<number>18600000008</number>
<address>beijing8</address>
</contact>
<contact id="9">
<name>Damon9</name>
<number>18600000009</number>
<address>beijing9</address>
</contact>
</contacts>

在示例中,訪問了SD卡,所以需要在清單文件中加入SD卡寫入權限:
復制代碼 代碼如下:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产自产91精品| 久久久精品在线| 欧美孕妇毛茸茸xxxx| 欧美午夜性色大片在线观看| 国内精品模特av私拍在线观看| 国产美女精品视频| 欧美视频免费在线观看| 一区二区三区回区在观看免费视频| 亚洲人成自拍网站| 欧美性猛交xxxx免费看漫画| 欧美激情亚洲精品| 国产精品久久久久国产a级| 亚洲欧美日韩一区二区在线| 日韩av在线一区二区| 成人午夜一级二级三级| 精品国产老师黑色丝袜高跟鞋| 亚洲精品99久久久久中文字幕| 欧美日韩国产限制| 国产一区二区三区三区在线观看| 色青青草原桃花久久综合| 91视频九色网站| 国产日韩在线精品av| 97精品国产97久久久久久免费| 91精品国产沙发| 欧美一级淫片播放口| 成人日韩av在线| 亚洲精品一区二区三区婷婷月| 久久91亚洲精品中文字幕| 在线不卡国产精品| 亚洲欧美日韩精品久久| 亚洲综合国产精品| 午夜精品视频在线| 亚洲精品自拍偷拍| 国产在线观看91精品一区| 国产精品手机播放| 国内精品在线一区| 成人国产精品一区二区| 57pao国产精品一区| 不卡av电影院| 午夜精品福利在线观看| 亚洲国产成人一区| 91美女片黄在线观| 国产精品一区二区三区久久| 色先锋久久影院av| 国产成人涩涩涩视频在线观看| 欧美另类极品videosbestfree| 亚洲精品乱码久久久久久按摩观| 国产精品影院在线观看| 久久精品99国产精品酒店日本| 亚洲精品欧美一区二区三区| 26uuu另类亚洲欧美日本老年| 欧美日韩国产一中文字不卡| 欧美成人sm免费视频| 国产精品久久久久久久久久久久| 亚洲一区二区三区香蕉| 亚洲精品一区二三区不卡| 欧美性高潮床叫视频| 不卡伊人av在线播放| 欧美成人午夜影院| 国产精品一久久香蕉国产线看观看| 日韩在线欧美在线国产在线| 日韩电影中文字幕av| 日韩av在线免费观看一区| 国产91精品久久久久久久| 国产精品成久久久久三级| 中文字幕国内精品| 中文字幕在线亚洲| 欧美一区亚洲一区| 欧美一级bbbbb性bbbb喷潮片| 亚洲人成网站色ww在线| 在线成人免费网站| 亚洲欧美在线一区二区| 欧美激情精品久久久久久蜜臀| 日韩成人在线网站| 欧美裸体xxxx极品少妇软件| 日韩中文字幕国产精品| 日韩av在线网址| 久久精品视频播放| 国产精品久久久久久久午夜| 自拍偷拍亚洲欧美| 欧美精品久久久久久久久| 国产精品精品视频一区二区三区| 日韩在线观看免费全集电视剧网站| 欧美激情久久久| 久久韩剧网电视剧| 亚洲第一网中文字幕| 日韩亚洲欧美中文高清在线| 欧美超级免费视 在线| 日韩精品电影网| 久久成人在线视频| www欧美xxxx| 日韩精品中文字幕在线| 一色桃子一区二区| 久久久天堂国产精品女人| 精品亚洲一区二区三区四区五区| 国产这里只有精品| 一区三区二区视频| 色爱精品视频一区| 久久精品成人动漫| 亚洲精品一区在线观看香蕉| 国产精品中文字幕在线观看| 亚洲免费影视第一页| 一区二区三区无码高清视频| 亚洲乱码一区二区| 黄色一区二区在线| 色妞色视频一区二区三区四区| 亚洲人成电影网站色| 国产精品美女www爽爽爽视频| 日韩成人免费视频| 亚洲精品日韩在线| 日韩专区在线播放| 日韩在线视频免费观看| 日韩美女视频免费在线观看| 亚洲女人天堂成人av在线| 亚洲日本欧美中文幕| 亚洲的天堂在线中文字幕| 最近中文字幕日韩精品| 久久久久久久爱| 欧美激情小视频| 亚洲女人天堂色在线7777| 亚洲美女中文字幕| 午夜精品久久17c| 在线视频欧美性高潮| 国产中文日韩欧美| 亚洲tv在线观看| 欧美xxxx做受欧美| 亚洲一级片在线看| 亚洲精品福利免费在线观看| 91免费人成网站在线观看18| 亚洲娇小xxxx欧美娇小| 亚洲精品国产精品自产a区红杏吧| 亚洲欧美制服丝袜| 欧美—级a级欧美特级ar全黄| 中文字幕国产精品久久| 国产精品美女视频网站| 久久久91精品国产一区不卡| 亚洲午夜精品久久久久久性色| 国产成人a亚洲精品| 久久国产加勒比精品无码| 中文字幕av一区二区| 亚洲视频777| 亚洲人永久免费| 亚洲欧美在线x视频| 日韩久久免费电影| 国产精品国产三级国产aⅴ9色| 久久精品视频播放| 国产99久久精品一区二区永久免费| 国产亚洲精品美女久久久久| 日韩在线视频导航| 国产精品成人观看视频国产奇米| 在线电影欧美日韩一区二区私密| 91精品久久久久久久| 国产精品热视频| 国内精品400部情侣激情| 国产精品v日韩精品| 国产91对白在线播放| 国产a级全部精品| 午夜免费日韩视频| 丝袜美腿精品国产二区| 久久久久久久久久久久久久久久久久av| 亚洲欧美日韩国产中文专区| 国产美女精品免费电影| 91久久久久久久久久久久久| 在线观看欧美日韩|