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

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

1.XmlSerializer类介绍

通过Xml.newSerializer()来获取XmlSerializer

XmlSerializer常用方法如下所示:

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

示例代码如下:

  1. private void writePersonXml(){
  2.  
  3. XmlSerializer serializer = Xml.newSerializer();
  4.  
  5. try {
  6. serializer.setOutput(openFileOutput("persons.xml", MODE_PRIVATE), "utf-8");
  7. serializer.startDocument("utf-8", true);
  8.  
  9. serializer.startTag(null,"persons");
  10.  
  11. //创建两个成员
  12. serializer.startTag(null,"person");
  13. serializer.attribute(null, "id", ""); //添加编号
  14.  
  15. serializer.startTag(null,"姓名");
  16. serializer.text("张三");
  17. serializer.endTag(null,"姓名");
  18.  
  19. serializer.startTag(null,"age");
  20. serializer.text("");
  21. serializer.endTag(null,"age");
  22.  
  23. serializer.endTag(null,"person");
  24.  
  25. serializer.startTag(null,"person");
  26. serializer.attribute(null, "id", ""); //添加编号
  27.  
  28. serializer.startTag(null,"姓名");
  29. serializer.text("李四");
  30. serializer.endTag(null,"姓名");
  31.  
  32. serializer.startTag(null,"age");
  33. serializer.text("");
  34. serializer.endTag(null,"age");
  35.  
  36. serializer.endTag(null,"person");
  37.  
  38. serializer.endTag(null,"persons");
  39. serializer.endDocument(); //结束文档,并将内容写入文件
  40.  
  41. } catch (Exception e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45.  
  46. }

运行后,生成persons.xml:

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

2.XmlPullParser介绍

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

XmlPullParser常用方法如下:

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

示例代码如下:

  1. private void parsePersonsXml(){
  2.  
  3. XmlPullParser pullParser = Xml.newPullParser();
  4.  
  5. try {
  6. pullParser.setInput(this.openFileInput("persons.xml"), "utf-8");
  7. String name = null;
  8. String age = null;
  9. String id = null;
  10.  
  11. int eventType = pullParser.getEventType();
  12.  
  13. while(eventType!=pullParser.END_DOCUMENT)
  14. {
  15. switch (eventType) {
  16. case XmlPullParser.START_TAG:
  17.  
  18. if("person".equals( pullParser.getName())){
  19.  
  20. id = pullParser.getAttributeValue(null, "id"); //获取编号,并初始化内容
  21. name =null;
  22. age = null;
  23.  
  24. }else if("姓名".equals(pullParser.getName())){
  25.  
  26. name = pullParser.nextText(); //获取姓名
  27.  
  28. }else if("age".equals(pullParser.getName())){
  29.  
  30. age = pullParser.nextText(); //获取年龄
  31.  
  32. }
  33. break;
  34.  
  35. case XmlPullParser.END_TAG:
  36.  
  37. if("person".equals( pullParser.getName())){
  38.  
  39. System.out.println("person : id="+id+" 姓名="+name+" 年龄="+age); //打印信息
  40.  
  41. }
  42.  
  43. break;
  44. }
  45.  
  46. eventType = pullParser.next();
  47. }
  48.  
  49. } catch (Exception e) {
  50. // TODO Auto-generated catch block
  51. e.printStackTrace();
  52. }
  53.  
  54. }

运行打印:

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. php变量中两种特殊类型

    第一种----资源 资源(resource):资源是由专门的函数来建立和使用的,例如打开文件.数据连接.图形画布.我们可以对资源进行操作(创建.使用和释放).任何资源,在不需要的时候应该被及时释放.如 ...

  2. Catch That Cow (简单BFS+剪枝)

    Problem Description Farmer John has been informed of the location of a fugitive cow and wants to cat ...

  3. hadoop_2.6.5集群安装

    安装hadoop2.6.5集群: 1.规划设计: JacK6:NameNode,jobtracker JacK7:secondnode,datenode,tasktracker JacK8:datan ...

  4. Linux下的expect

    expect简介 expect是一款自动化的脚本解释型的工具. expect基于tcl脚本,expect脚本的运行需要tcl的支持. expect对一些需要交互输入的命令很有帮助,比如ssh ftp ...

  5. zabbix3.4搭建钉钉报警

    1.在钉钉群里添加一个自定义的机器 在设置说明中无需开启Outgoing机制 红色箭头指的信息很重要后面脚本会用到 2.脚本 #!/usr/bin/python # -*- coding: utf-8 ...

  6. http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风

    http://i.youku.com/u/UMzQ3NjQ0MDAw C语言教学 觅风

  7. FFMPEG学习----分离视音频里的PCM数据

    /** * 参考于:http://blog.csdn.net/leixiaohua1020/article/details/46890259 */ #include <stdio.h> # ...

  8. ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错

    ubuntu 16.04 anaconda 4.2.0 安装tensorflow 报错. 安装pyenv后,在pyenv环境内安装 anaconda,然后再安装tensorflow不再报错,比较奇怪, ...

  9. 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 ...

  10. partition show for oracle version

    Dear all You may remember that my blog has a view script for checking sqlserver partition tables. No ...