11.Android-Xml读写
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读写的更多相关文章
- 在android中读写文件
在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...
- 二、Android XML数据解析
XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- Android xml 格式 随笔
打包的时候Android xml文件会由字符格式(utf-8编码)转换为二进制格式.具体如:http://blog.csdn.net/jiangwei0910410003/article/detail ...
- android XMl 解析神奇xstream 六: 把集合list 转化为 XML文档
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 五: 把复杂对象转换成 xml ,并写入SD卡中的xml文件
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 四: 将复杂的xml文件解析为对象
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 三: 把复杂对象转换成 xml
前言:对xstream不理解的请看: android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 android XMl 解析神奇xs ...
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
随机推荐
- php变量中两种特殊类型
第一种----资源 资源(resource):资源是由专门的函数来建立和使用的,例如打开文件.数据连接.图形画布.我们可以对资源进行操作(创建.使用和释放).任何资源,在不需要的时候应该被及时释放.如 ...
- Catch That Cow (简单BFS+剪枝)
Problem Description Farmer John has been informed of the location of a fugitive cow and wants to cat ...
- hadoop_2.6.5集群安装
安装hadoop2.6.5集群: 1.规划设计: JacK6:NameNode,jobtracker JacK7:secondnode,datenode,tasktracker JacK8:datan ...
- Linux下的expect
expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp ...
- zabbix3.4搭建钉钉报警
1.在钉钉群里添加一个自定义的机器 在设置说明中无需开启Outgoing机制 红色箭头指的信息很重要后面脚本会用到 2.脚本 #!/usr/bin/python # -*- coding: utf-8 ...
- http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风
http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风
- FFMPEG学习----分离视音频里的PCM数据
/** * 参考于:http://blog.csdn.net/leixiaohua1020/article/details/46890259 */ #include <stdio.h> # ...
- ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错
ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错. 安装pyenv后,在pyenv环境内安装 anaconda,然后再安装tensorflow不再报错,比较奇怪, ...
- EMC NW NMM to restore MS AG database
Following last article, how to restore MS AG database , that is in the following: You see ? Cheer u ...
- partition show for oracle version
Dear all You may remember that my blog has a view script for checking sqlserver partition tables. No ...