import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer; import android.util.Log;
import android.util.Xml; import com.itheima27.xmlparserserializer.entities.Person; public class XmlUtils { private static final String TAG = "XmlUtils"; /**
* 把数据以xml形式写到本地
*/
public void writeToLocal() throws Exception { List<Person> personList = new ArrayList<Person>();
for (int i = 0; i < 30; i++) {
personList.add(new Person(i, "王" + i, 20 + i));
} XmlSerializer serializer = Xml.newSerializer(); // 创建Xmlserializer的对象
// 指定序列化对象输出的流
FileOutputStream fos = new FileOutputStream("/mnt/sdcard/person.xml");
serializer.setOutput(fos, "utf-8"); serializer.startDocument("utf-8", true); // 写xml头 serializer.startTag(null, "persons"); // 开始的根节点 for (Person person : personList) {
serializer.startTag(null, "person");
serializer.attribute(null, "id", String.valueOf(person.getId())); // 写人的姓名
serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.endTag(null, "name"); // 写人的年龄
serializer.startTag(null, "age");
serializer.text(String.valueOf(person.getAge()));
serializer.endTag(null, "age"); serializer.endTag(null, "person");
} serializer.endTag(null, "persons"); // 结束的根节点 serializer.endDocument(); // 标记xml输出完毕
} /**
* 从本地文件解析xml数据
*/
public void parserXmlFromLocal() throws Exception {
// 创建Pull解析器对象
XmlPullParser parser = Xml.newPullParser();
// 指定解析的文件
FileInputStream fis = new FileInputStream("/mnt/sdcard/person.xml");
parser.setInput(fis, "UTF-8"); int eventType = parser.getEventType(); // 获得解析器的第一个事件类型 List<Person> personList = null;
Person person = null;
String name; while(eventType != XmlPullParser.END_DOCUMENT) { // 如果事件类型不等于结束的类型, 继续循环
String tagName = parser.getName(); // 获得当前节点的名称 // 解析数据
switch (eventType) {
case XmlPullParser.START_TAG: // 代表开始节点 <persons> if("persons".equals(tagName)) {
// 初始化集合
personList = new ArrayList<Person>();
} else if("person".equals(tagName)) {
person = new Person();
person.setId(Integer.valueOf(parser.getAttributeValue(null, "id")));
} else if("name".equals(tagName)) {
name = parser.nextText(); // 当前是<name> 节点 nextText是取<name> 后边的值
person.setName(name);
} else if("age".equals(tagName)) {
person.setAge(Integer.parseInt(parser.nextText()));
}
break;
case XmlPullParser.END_TAG: // 代表结束节点 </person>
if("person".equals(tagName)) { // 当前是</person>
// 把上面person的对象添加到集合中
personList.add(person);
}
break;
default:
break;
} eventType = parser.next(); // 赋值下一个事件类型
} if(personList != null) {
for (Person p : personList) {
Log.i(TAG, p.toString());
}
}
}
}

android xml操作的更多相关文章

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

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

  2. Android权限操作之uses-permission详解

    本文实例讲述了Android权限操作之uses-permission.分享给大家供大家参考,具体如下: 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android ...

  3. 二、Android XML数据解析

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

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

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

  5. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  6. LINQ系列:LINQ to XML操作

    LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...

  7. T-Sql(五)xml操作

    t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...

  8. XML格式示例 与 XML操作(读取)类封装

    header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...

  9. 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】

    一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...

随机推荐

  1. 论文笔记之:Deep Reinforcement Learning with Double Q-learning

    Deep Reinforcement Learning with Double Q-learning Google DeepMind Abstract 主流的 Q-learning 算法过高的估计在特 ...

  2. IL-rewriting profiler

    https://blogs.msdn.microsoft.com/davbr/2007/03/06/creating-an-il-rewriting-profiler/ https://blogs.m ...

  3. 使用swiper和吸顶效果代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  4. asp.net系统过滤器、自定义过滤器

    原文地址:http://www.cnblogs.com/kissdodog/archive/2013/05/21/3090513.html 一.系统过滤器使用说明 1.OutputCache过滤器 O ...

  5. linux知识点

    通过gui来使用通过api来使用通过cli来使用通过tui来使用 进程不在,但tcp连接还一直存在的解决办法--tcpkill命令 http://www.centoscn.com/CentOS/Int ...

  6. C#, float.ToString()的一个坑

    下面代码的输出竟然是2.0: float a=1.95f;Debug.Log(a.ToString("0.0")); 如果想截取一位小数,可以: float a=1.95f; fl ...

  7. 关于getClass().getClassLoader()

    关于getClass().getClassLoader()   InputStream   is   =   getClass().getClassLoader().getResourceAsStre ...

  8. SourceInsight支持Python代码阅读

    这个话题,很简单,主要是要有一个插件Python.CLF,这个文件可以从我的GitHub上下载.然后,参照下面的图片显示的步骤,就很快搞定! 具体的步骤,看下面的三张图片,顺序编号了,从1到9,对照着 ...

  9. 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

    http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.c ...

  10. Struts2 - 传值

    Struts2传值有几种方式: 1)URL parameter 例如配置代码: <action name="login_*" class="com.my.actio ...