Xml序列化器(XmlSerializer类)

实现效果

最开始
在这里插入图片描述
要保存的内容
在这里插入图片描述
点击保存按钮,保存成功
在这里插入图片描述
在这里插入图片描述
点击读取(读取设置在项目的xml)
在这里插入图片描述
在这里插入图片描述
点击下一个是指数据一条条读取
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上代码

设置读取权限:
在这里插入图片描述
activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="没有数据"
        android:id="@+id/tv_readXML"></TextView>

    <Button
        android:layout_width="match_parent"
        android:onClick="SaveXmlClick"
        android:layout_height="wrap_content"
        android:text="XML保存序列化"></Button>

    <Button
        android:onClick="ReadXmlClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="读取序列化"></Button>

    <Button
        android:onClick="NextClick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="下一个"></Button>

</LinearLayout>

MainActivity,java

package com.example.xmlpullparser;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.os.Environment;
import android.util.Xml;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    int index = 0;
    List<Student> students = null;
    TextView tv1 = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        students = new ArrayList<Student>();
        tv1 = findViewById(R.id.tv_readXML);
        Student studentBeauty = new Student(001,"范冰冰",20);
        Student studentSexy = new Student(002,"林志玲",21);
        Student studentHandsome = new Student(003,"张杰",22);
        Student studentLover = new Student(004,"薛之谦",23);
        students.add(studentBeauty);
        students.add(studentHandsome);
        students.add(studentLover);
        students.add(studentLover);
    }

    //保存操作
    public void SaveXmlClick(View view){
        File file = new File(Environment.getExternalStorageDirectory(),"note.xml");
        FileOutputStream fileOutputStream = null;
        try{
            fileOutputStream = new FileOutputStream(file);
            //表明采用XML序列化存储
            XmlSerializer xmlSerializer = Xml.newSerializer();
            xmlSerializer.setOutput(fileOutputStream,"utf-8");
            //开始写
            xmlSerializer.startDocument("utf-8",true);
            xmlSerializer.startTag(null,"Student");
            for (Student student:students){
                xmlSerializer.startTag(null,"student");
                //写ID
                xmlSerializer.attribute(null,"id",student.getStudentId()+"");
                xmlSerializer.startTag(null,"name");
                xmlSerializer.text(student.getStudenswatName());
                xmlSerializer.endTag(null,"name");
                xmlSerializer.startTag(null,"age");
                xmlSerializer.text(student.getStudentAge()+"");
                xmlSerializer.endTag(null,"age");
                xmlSerializer.endTag(null,"student");
            }
            xmlSerializer.endTag(null,"Student");
            xmlSerializer.endDocument();
            //写入磁盘
            xmlSerializer.flush();
            fileOutputStream.close();
            Toast.makeText(MainActivity.this,"Succeed",Toast.LENGTH_SHORT).show();
        }catch (Exception e){
            Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
            e.printStackTrace();
        }
    }

    //读操作
    public void ReadXmlClick(View view){
        students = new ArrayList<Student>();
        students = getStudents(getResources().openRawResource(R.raw.myperson));
        String strList = "";
        for(Student student:students){
            strList+="编号:"+student.getStudentId()+"姓名:"+student.getStudenswatName()+",年龄:"+student.getStudentAge()+"\n";
        }
        tv1.setText(strList);
    }

    //读出的算法
    private List<Student> getStudents(InputStream inputStream){
        //等待接收读出来的成员列表
        List<Student> studentRead = null;
        //将读出来的对象放到一个临时的变量中进行存储
        Student student = null;
        //声明一个解析器
        XmlPullParser xmlPullParser = null;
        try{
            xmlPullParser = Xml.newPullParser();
            //设置解析器xml的来源,并用utf-8进行读取
            xmlPullParser.setInput(inputStream,"utf-8");
            //获取事件类型(即xml的标签类型)
            int eventType = xmlPullParser.getEventType();
            while(eventType!=XmlPullParser.END_DOCUMENT){
                switch (eventType){
                    case XmlPullParser.START_DOCUMENT:
                        studentRead = new ArrayList<Student>();
                        break;
                    case XmlPullParser.START_TAG:
                        if(xmlPullParser.getName().equals("student")){
                            String strId = xmlPullParser.getAttributeValue(0);
                            student = new Student();
                            student.setStudentId(Integer.parseInt(strId));
                            eventType = xmlPullParser.next();
                        }else if(xmlPullParser.getName().equals("name")){
                            String stuname = xmlPullParser.nextText();
                            student.setStudentName(stuname);
                            eventType = xmlPullParser.next();
                        }else if(xmlPullParser.getName().equals("age")){
                            String strage = xmlPullParser.nextText();
                            student.setStudentAge(Integer.parseInt(strage));
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        if(xmlPullParser.getName().equals("student")){
                            studentRead.add(student);
                            student = null;
                    }
                        break;
                }
                eventType = xmlPullParser.next();
            }
            inputStream.close();
        }catch (Exception e){
            e.printStackTrace();
            Toast.makeText(MainActivity.this,"Failed",Toast.LENGTH_SHORT).show();
        }
        return studentRead;
    }

    public void NextClick(View view){
        List<Student> students1 = getStudents(getResources().openRawResource(R.raw.myperson));
        Student student = students1.get(index);
        String strList = "";
        //一个一个显示
        strList="编号:"+student.getStudentId()+"姓名:"+student.getStudenswatName()+",年龄:"+student.getStudentAge()+"\n";
        tv1.setText(strList);
        index++;
        if(index == students1.size()){
            index = 0;
        }
    }
}

Student.java

package com.example.xmlpullparser;

public class Student {
    int StudentId = 0;
    String StudentName = "";
    int StudentAge = 0;

    public Student(int studentId, String studentName, int studentAge) {
        StudentId = studentId;
        StudentName = studentName;
        StudentAge = studentAge;
    }

    public Student(){

    }

    public int getStudentId() {
        return StudentId;
    }

    public void setStudentId(int studentId) {
        StudentId = studentId;
    }

    public String getStudenswatName() {
        return StudentName;
    }

    public void setStudentName(String studentName) {
        StudentName = studentName;
    }

    public int getStudentAge() {
        return StudentAge;
    }

    public void setStudentAge(int studentAge) {
        StudentAge = studentAge;
    }
}

Raw里面设置的本地待读取xml:myperson.xml

<?xml version="1.0" encoding="utf-8"?>
<Student>
    <student id="0">
        <name>曹操</name>
        <age>21</age>
    </student>
    <student id="1">
        <name>刘备</name>
        <age>20</age>
    </student>
    <student id="3">
        <name>孙权</name>
        <age>19</age>
    </student>
</Student>

注意事项

要读取的xml文件必须设置在res下,建立文件夹是value = raw,创建xml文件时必须通过创建file—>file name:.xml 否则会报错。*
在这里插入图片描述

特别注意

仅供参考学习,转载请附上原文链接
图片来源于网络、个人收藏、个人制作
该篇文章不做任何商业用途,纯属分享学习心得,如有侵权,望联系本人处理
还在读大学的程序员,项目经验少,如有纰漏,感谢指正
需要源代码请私聊联系本人
谢谢配合

如果这篇文章对您有帮助,小小的点个赞,算是给小学弟的鼓励吧!谢谢大佬!!/呱呱.jpg

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中的XML序列化和反序列化是常用的技术,可以将对象转化为便于传输的XML格式,并且可以将XML格式的数据还原为对象。其中,XML序列化可以使用多种方式实现,比如二进制、字节数组、JSON字符串和XML字符串等。在C#中,可以使用XmlSerializer的Serialize方法将对象序列化XML字符串,使用Deserialize方法将XML字符串反序列化为对象。\[1\] 在进行XML序列化时,可以通过设置XmlTextWriter的Formatting属性为Formatting.Indented来实现换行显示,使得生成的XML字符串更加可读。另外,需要注意的是,Dictionary本身不支持序列化,所以需要重写为可序列化的SerializableDictionary来实现对字典的序列化操作。\[2\] 对于XML序列化为对象,可以使用deserialize方法来实现。该方法接受一个XML字符串和一个型参数,通过使用XmlSerializer的Deserialize方法将XML字符串反序列化为指定型的对象。在反序列化过程中,需要使用StringReader将XML字符串转化为可读的流,并使用XmlSerializer进行反序列化操作。\[3\] #### 引用[.reference_title] - *1* *2* *3* [C# XML序列化和反序列化(XmlSerializer)](https://blog.csdn.net/sD7O95O/article/details/128783513)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值