android xml操作
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操作的更多相关文章
- android XMl 解析神奇xstream 二: 把对象转换成xml
前言:对xstream不理解的请看:android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件 1.Javabeen 代码 packa ...
- Android权限操作之uses-permission详解
本文实例讲述了Android权限操作之uses-permission.分享给大家供大家参考,具体如下: 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android ...
- 二、Android XML数据解析
XML,可扩展标记语言.可以用来存储数据,可以看做是一个小型的数据库,SharedPreference就是使用XML文件存储数据的,SQLite底层也是一个XML文件,而在网络应用方面,通常作为信息的 ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- LINQ系列:LINQ to XML操作
LINQ to XML操作XML文件的方法,如创建XML文件.添加新的元素到XML文件中.修改XML文件中的元素.删除XML文件中的元素等. 1. 创建XML文件 string xmlFilePath ...
- T-Sql(五)xml操作
t-sql中的xml操作在我们平时做项目的过程中用的很少,因为我们处理的数据量很少,除非一些用到xml的地方,t-sql中xml操作一般用在数据量很大,性能优化的地方,当然我在平时做项目的时候也是没用 ...
- XML格式示例 与 XML操作(读取)类封装
header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
随机推荐
- m3u8文件简介
1. M3U8文件概念 M3U8文件是指UTF-8编码格式的M3U文件.M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播 ...
- c++时间处理
struct tm;这是一个结构体,包括了时间的各个属性年月日,时分秒 time(time_t * t);获取从1900年到现在经过的毫秒数,或者也可以这么用time_t t=time(NULL); ...
- jquery循环延迟加载,用于在图片加载完成后再加载js
<html> <head> <script type="text/javascript" src="http://lib.sinaapp.c ...
- ASP.NET MVC中的拦截器
在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器, 所谓的拦截器也没有什么的,只是写一个类,继承另一个类和一个接口,顺便实现接口里面的方法而以 ...
- unity, SerializedObject.FindProperty不要写在Editor的OnEnable里,要写在OnInspectorGUI里
如果像下面这样写: using UnityEngine;using System.Collections;using UnityEditor;using System.Collections.Gene ...
- Oracle无法启动,ORA-01034、ORA-01078
因为调整32位系统的SGA区大小时不慎,超出可用内存,造成Oracle实例无法启动,报出ORA-01034.ORA-01078等错误.如下图 sqlplus /nolog SQL> conn / ...
- .NET中的Timer类型用法详解
这篇文章主要介绍了.NET中的Timer类型用法,较为详细的分析了Timer类型在各种环境下的用法,需要的朋友可以参考下 在.NET FrameWork中有多个Timer,那么怎么根据实际情况进行 ...
- eclipse中web工程新建jsp文件报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
web工程中新建jsp文件提示:The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...
- JCaptcha做验证码遇到的问题引出的思考
JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...
- SourceInsight支持Python代码阅读
这个话题,很简单,主要是要有一个插件Python.CLF,这个文件可以从我的GitHub上下载.然后,参照下面的图片显示的步骤,就很快搞定! 具体的步骤,看下面的三张图片,顺序编号了,从1到9,对照着 ...