XmlSerializer简单使用

Android  2024年10月18日 am8:24发布6天前更新 91es.com站长
5 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、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站内容: 部分来源于网络,仅供学习和参考,若侵权请留言
3、 本站申明: 个人流水账日记,内容并不保证有效

暂无评论

暂无评论...

随机推荐

Linux signal 常见的信号含义表

前言简单记录一下Linux signal 常见的信号含义。PS : 本文摘抄,只是方便自己查阅而已。正文信号表 SIGHUP       1       /* Hangup (POSIX). */                         终止进程     终端线路挂断S...

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

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

庐隐:吹牛的妙用

吹牛是一种夸大狂,在道德家看来,也许认为是缺点,可是在处世接物上却是一种呱呱叫的妙用。假使你这一生缺少了吹牛的本领,别说好饭碗找不到,便连黄包车夫也不放你在眼里的。西洋人究竟近乎白痴,什么事都只讲究脚踏实地去做,这样费力气的勾当,我们聪明的中国人,简直连牙齿都要笑掉了。西洋人什么事都讲究按部就班的...

Android中图片圆角或圆形记录

前言对图片进行圆角或圆形处理,这个在项目很常用,比如专辑图等。之前项目用过,但没有记录,今天有空就记录一下,方便自己查阅。正文本文记录一下圆形图片或对图片进行圆角处理。效果如图。隐藏内容!付费阅读后才能查看!¥3多个隐藏块只需支付一次付费阅读

Android换肤之Toast和Dialog

前言前面介绍过Android静态换肤日夜模式的切换(原文:《Android静态换肤-日夜主题切换之继承Activity记录 》),从中我们知道,Toast和Dialog存在无法切换成功。原因是Toast或者Dialog是需要时才去初始化的,此时换肤插件没法获取到View。PS:日夜模式不存在...

Android自定义view生命周期

自定义布局或者自定义view都是一样的流程周期如下 #  进入 onFinishInflate: onAttachedToWindow: onWindowVisibilityChanged: onVisibilityChanged: on...