XmlSerializer简单使用

Android  2024年10月18日 am8:24发布1个月前更新 城堡大人
51 0 0

前言

XmlSerializerAndroid提供的一个类,用于创建和编辑XML文档。

本文简单记录一下XmlSerializer的使用。

正文

常用方法

下面是XmlSerializer创建xml文档的常用的方法。

1. endDocument() 结束XML文档
2. startDocument (String encoding, Boolean standalone) 开始xml文档
3. startTag(String namespace, String tagName) 开始一个标签。
4. endTag(String namespace, String tagName) 结束一个标签。
5. attribute(String namespace, String name, String value) 为标签添加一个属性。
6. text(String text) 添加文本内容

简单示例

直接上代码。

public class Student {
    private int age;
    private String name;
    private float score;

    public Student(int age, String name, float score) {
        this.age = age;
        this.name = name;
        this.score = score;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    public float getScore() {
        return score;
    }
}
//初始化数据
private ArrayList<Student> mList = new ArrayList<>();
mList.add(new Student(16, "张三", 500));
mList.add(new Student(17, "李四", 490));
mList.add(new Student(15, "王五", 580));
//xml路径
mXmlPath = getFilesDir().getPath() + "/student.xml";
例子1
FileOutputStream fileOutputStream = null;
try {
    fileOutputStream = new FileOutputStream(mXmlPath);
    XmlSerializer xmlSerializer = Xml.newSerializer();
    xmlSerializer.setOutput(fileOutputStream, "UTF-8");
    xmlSerializer.startDocument(null, true);
    xmlSerializer.text("\n");
    xmlSerializer.startTag(null, "school");
    xmlSerializer.text("\n");
    for (Student student : mList) {
        xmlSerializer.startTag(null, "student");
        xmlSerializer.attribute(null, "age", Integer.toString(student.getAge()));
        xmlSerializer.attribute(null, "name", student.getName());
        xmlSerializer.attribute(null, "score", Float.toString(student.getScore()));
        xmlSerializer.endTag(null, "student");
        xmlSerializer.text("\n");
    }
    xmlSerializer.endTag(null, "school");
    xmlSerializer.endDocument();
    //xmlSerializer.flush();
    //fileOutputStream.getFD().sync();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (null != fileOutputStream) {
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

注意,上面使用了换行符。这里只是方便观看。

xmlSerializer.text("\n");

最后,student.xml中内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<school>
<student age="16" name="张三" score="500.0" />
<student age="17" name="李四" score="490.0" />
<student age="15" name="王五" score="580.0" />
</school>
例子2

这使用了Gson,主要是要存储自定义类的List,后面还需要进行解析。

implementation 'com.google.code.gson:gson:2.11.0'
Gson mGson = new GsonBuilder().setPrettyPrinting().create();
FileOutputStream fileOutputStream = null;
try {
    fileOutputStream = new FileOutputStream(mXmlPath);
    XmlSerializer xmlSerializer = Xml.newSerializer();
    xmlSerializer.setOutput(fileOutputStream, "UTF-8");
    xmlSerializer.startDocument(null, true);
    xmlSerializer.text("\n");
    xmlSerializer.startTag(null, "school");
    xmlSerializer.text("\n");
    xmlSerializer.startTag(null, "mList");
    xmlSerializer.attribute(null, "data", mGson.toJson(mList));
    xmlSerializer.endTag(null, "mList");
    xmlSerializer.text("\n");
    xmlSerializer.endTag(null, "school");
    xmlSerializer.endDocument();
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (null != fileOutputStream) {
        try {
            fileOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

直接把mList进行写入xml,最后,student.xml中内容:

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<school>
<mList data='[&#10;  {&#10;    "age": 16,&#10;    "name": "张三",&#10;    "score": 500.0&#10;  },&#10;  {&#10;    "age": 17,&#10;    "name": "李四",&#10;    "score": 490.0&#10;  },&#10;  {&#10;    "age": 15,&#10;    "name": "王五",&#10;    "score": 580.0&#10;  }&#10;]' />
</school>

参考文章

 历史上的今天

  1. 2021: 茨维塔耶娃:我想和你一起生活在某个小镇(0条评论)
  2. 2019: 梁文道:早餐里见世界(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

open failed EACCES (Permission denied)

前言最近Android 10上读取文件时,出现如下异常:03-27 01:07:14.882 W/System.err(18732): java.io.FileNotFoundException: /storage/udisk2/wawa.mp3: open failed: EACCES (P...

麦芒:今夜的火花今夜就会熄灭

今夜的火花今夜就会熄灭告诉我的不是一个人而是两个人、三个人……先微笑,然后是沉默和迷惘在数着星星的过程中也许会忘记自己眉毛底下两颗最有人性的眸子它们离我一样遥不可及而我多么疲惫,多么恍惚好像一个白昼尚未结疤的伤口,有着腐败的肉和新鲜的血,无人用嘴吮吸手指,手指在跳动,仿佛弹...

Thread.join()简单介绍

前言简单记录一下Thread.join()的作用。这里只是简单记录一下,方便自己回顾而已。正文join()是在Thread.java中定义join源码/** * Waits for this thread to die.[等待这个线程死亡] * @throws Interrupt...

[摘]Android 系统重启原因分析

前言Android重启,这种影响使用的问题必须解决和找出原因。正文以下是摘抄文章内容,略有删减。重启原因分类上层造成重启system_server被杀watchdog重启重要线程阻塞kernel造成重启空指针非法地址kernel watchdog造成重启,...

刘半农:落叶

秋风把树叶吹落在地上,它只能悉悉索索,发几阵悲凉的声响。 它不久就要化作泥;但它留得一刻,还要发一刻的声响,虽然这已是无可奈何的声响了,虽然这已是它最后的声响了。1919

Android6.0Settings分析

源码:Android 6.0应用:Settings目录:android-6.0.0_r1\packages\apps\Settings Android 中Settings的代码很多,我这里只是简单分析一下,仅供参考。如果要深入了解设置,自己要多看看源码。一般分析应用的话...