android中写XML时,需要用到XmlSerializer类

解析XML时,则需要用到XmlPullParser类

1.XmlSerializer类介绍

通过Xml.newSerializer()来获取XmlSerializer

XmlSerializer常用方法如下所示:

void setOutput(OutputStream os, String encoding);
//设置要写入的XML的文件位置,以及encoding编码格式
//比如:
//File file = new File(Environment.getExternalStorageDirectory(), "text.xml"); //xmlSerializer.setOutput(new fileOutputStream(file), "utf-8"); void startDocument(String encoding, Boolean standalone);
//设置文档开头描述,比如:" <?xml version="1.0" encoding="utf-8" standalone="yes"?>"
// standalone:表示该XML是否是独立的,默认为true,如果填为false,则表示该XML被外部文件DTD约束 startTag(String namespace, String name);
//写入开始元素标签 endTag(String namespace, String name);
//写入结束元素标签 attribute(String namespace, String name, String value);
//往元素标签里写属性(name="value"),比如<name id="123">
text(String text);
//往元素里添加内容,比如: <name id="123">张三</name>

示例代码如下:

private void writePersonXml(){

        XmlSerializer serializer = Xml.newSerializer();

        try {
serializer.setOutput(openFileOutput("persons.xml", MODE_PRIVATE), "utf-8");
serializer.startDocument("utf-8", true); serializer.startTag(null,"persons"); //创建两个成员
serializer.startTag(null,"person");
serializer.attribute(null, "id", ""); //添加编号 serializer.startTag(null,"姓名");
serializer.text("张三");
serializer.endTag(null,"姓名"); serializer.startTag(null,"age");
serializer.text("");
serializer.endTag(null,"age"); serializer.endTag(null,"person"); serializer.startTag(null,"person");
serializer.attribute(null, "id", ""); //添加编号 serializer.startTag(null,"姓名");
serializer.text("李四");
serializer.endTag(null,"姓名"); serializer.startTag(null,"age");
serializer.text("");
serializer.endTag(null,"age"); serializer.endTag(null,"person"); serializer.endTag(null,"persons");
serializer.endDocument(); //结束文档,并将内容写入文件 } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

运行后,生成persons.xml:

接下来,我们便通过XmlPullParser来解析persons.xml

2.XmlPullParser介绍

通过Xml. newPullParser()来获取XmlPullParser;

XmlPullParser常用方法如下:

void setInput(InputStream inputStream, String inputEncoding);
//设置要解析的文件以及编码 int getEventType();
//获取当前事件类型,返回的类型有START_DOCUMENT(文档开头)、START_TAG (元素开头)、END_TAG(元素结束)、TEXT (内容)、 END_DOCUMENT(文档结束) int next();
//获取下个事件类型. 返回的类型和getEventType()一样. getName(); //获取当前元素名 getTextCharacters(); //获取当前内容(当getEventType ()==TEXT时通过这个来获取元素内容) nextText(); //获取下个内容(当getEventType ()==START_TAG时通过这个来获取元素内容)

示例代码如下:

   private void parsePersonsXml(){

        XmlPullParser pullParser = Xml.newPullParser();

        try {
pullParser.setInput(this.openFileInput("persons.xml"), "utf-8");
String name = null;
String age = null;
String id = null; int eventType = pullParser.getEventType(); while(eventType!=pullParser.END_DOCUMENT)
{
switch (eventType) {
case XmlPullParser.START_TAG: if("person".equals( pullParser.getName())){ id = pullParser.getAttributeValue(null, "id"); //获取编号,并初始化内容
name =null;
age = null; }else if("姓名".equals(pullParser.getName())){ name = pullParser.nextText(); //获取姓名 }else if("age".equals(pullParser.getName())){ age = pullParser.nextText(); //获取年龄 }
break; case XmlPullParser.END_TAG: if("person".equals( pullParser.getName())){ System.out.println("person : id="+id+" 姓名="+name+" 年龄="+age); //打印信息 } break;
} eventType = pullParser.next();
} } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

运行打印:

11.Android-Xml读写的更多相关文章

  1. 在android中读写文件

    在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...

  2. 二、Android XML数据解析

    XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...

  3. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  4. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  5. Android xml 格式 随笔

    打包的时候Android xml文件会由字符格式(utf-8编码)转换为二进制格式.具体如:http://blog.csdn.net/jiangwei0910410003/article/detail ...

  6. android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  7. android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  8. android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  9. android XMl 解析神奇xstream 三: 把复杂对象转换成 xml

    前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...

  10. android XMl 解析神奇xstream 二: 把对象转换成xml

    前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...

随机推荐

  1. 7、python基本数据类型之散列类型

    前言:python的基本数据类型可以分为三类:数值类型.序列类型.散列类型,本文主要介绍散列类型. 一.散列类型 内部元素无序,不能通过下标取值 1)字典(dict):用 {} 花括号表示,每一个元素 ...

  2. 钝化 会钝化 订单审批流程 码一会er

    先放一张订单审批流程图.预则立嘛

  3. BZOJ 3691 游行

    题目传送门 分析: 没被访问的点要C费用,跑一次路要C费用 把这两个统一一下试试... 那就是每次不标记起点或者终点 那就是路径覆盖了2333 二分图,x 部 i 号点与 y 部 j 号点连 i 到 ...

  4. 解决Android studio遇见Could not find common.jar (android.arch.core:common:1.0.0).错误

    不知道怎么回事就发生的错误,翻墙找到的解决方法,如下: Error:Could not find common.jar (android.arch.core:common:1.0.0).Searche ...

  5. python之pymysql模块

    模块安装 pip install pymysql 执行sql语句 import pymysql #通过pymysql下的connect函数来建立一个传输通道,连接本地mysql的所以host地址是12 ...

  6. Web 开发工具类(5) | DateUtils

    日期工具类 import java.text.ParseException; import java.text.ParsePosition; import java.text.SimpleDateFo ...

  7. 一份中规中矩的 iOS笔试题

    一.背景 因为一些原因,我从公司离职,在此之前,我需要帮忙招聘一个新人来做我的工作,于是就有了这篇文章. 由于公司项目16年就已经上线了,前同事写的项目中,有用xib.storyBoard.代码自动布 ...

  8. 初识Redis,看这一篇就够了

    环境的搭建和安装网上有很多教程,在这里就不再重复了. 1. Redis是什么? Redis(全称:Remote Dictionary Server 远程字典服务)是一个开源的使用ANSI C语言编写. ...

  9. java核心技术----接口

    接口:用来描述类具有什么功能,而并不给出每个功能的具体实现. 一个类可以实现一个或多个接口. 克隆(深拷贝):创建一个新对象,且新的对象的状态与原始对象的状态相同.当对克隆的新对象进行修改时,不会影响 ...

  10. 2018icpc南京现场赛-I Magic Potion(最大流)

    题意: n个英雄,m个怪兽,第i个英雄可以打第i个集合里的怪兽,一个怪兽可以在多个集合里 有k瓶药水,每个英雄最多喝一次,可以多打一只怪兽,求最多打多少只 n,m,k<=500 思路: 最大流, ...