XML文件的解析和序列化
序列化:
private void createXml() {
XmlSerializer serializer = Xml.newSerializer();// xml文件生成器
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileOutputStream fos = null;
try {
fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");// 为xml生成器设置输出流和字符编码
serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output",true);//设置xml文件的自动格式化
serializer.startDocument("utf-8", true);// 开始文档,参数分别为字符编码和是否保持独立
serializer.startTag(null, "persons"); // 开始标签,参数分别为:命名空间和标签名
for (Person person : list) { serializer.startTag(null, "person"); //对象的开始标签(对象为list集合的每一个元素)
serializer.attribute(null, "id", person.getId() + ""); //对象开始标签的属性 serializer.startTag(null, "name");// 开始标签
serializer.text(person.getName());// 文本内容
serializer.endTag(null, "name");// 结束标签 serializer.startTag(null, "sex");
serializer.text(person.getSex());
serializer.endTag(null, "sex"); serializer.startTag(null, "age");
serializer.text(person.getAge());
serializer.endTag(null, "age"); serializer.startTag(null, "address");
serializer.text(person.getAddress());
serializer.endTag(null, "address"); serializer.endTag(null, "person"); //对象的结束标签 }
serializer.endTag(null, "persons");// 结束标签
serializer.endDocument();// 结束xml文档
Toast.makeText(getApplicationContext(), "生成成功!", Toast.LENGTH_SHORT);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "生成失败!", Toast.LENGTH_SHORT);
e.printStackTrace();
} finally {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} }
解析:
private List<Person> pullXml() {
try {
File file = new File(Environment.getExternalStorageDirectory(),
"person.xml");
FileInputStream fis = new FileInputStream(file);
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();// 获取xml解析器
parser.setInput(fis, "utf-8");// 参数分别为输入流和字符编码
int type = parser.getEventType();
while (type != XmlPullParser.END_DOCUMENT) {// 如果事件不等于文档结束事件就继续循环
switch (type) {
case XmlPullParser.START_TAG: //开始标签
if ("persons".equals(parser.getName())) {//代表对象所在集合的开始标签
persons = new ArrayList<Person>();
} else if ("person".equals(parser.getName())) {//代表一个对象的开始;标签
person = new Person();
String id = parser.getAttributeValue(0);//得到标签的属性
person.setId(Integer.parseInt(id));
} else if ("name".equals(parser.getName())) {//对象的name属性的开始标签
person.setName(parser.nextText()); //得到开始标签和结束标签之间的文本内容
} else if ("sex".equals(parser.getName())) {//对象的sex属性的开始标签
person.setSex(parser.nextText());
} else if ("address".equals(parser.getName())) {//对象的address属性的开始标签
person.setAddress(parser.nextText());
} else if ("age".equals(parser.getName())) { //对象的age属性的开始标签
person.setAge(parser.nextText());
}
break;
case XmlPullParser.END_TAG: //结束标签
if ("person".equals(parser.getName())) { //当得到代表对象的结束标签时,说明一个对象的数据采集完毕,将对象添加进集合
persons.add(person);
person = null;
}
break;
}
type = parser.next();// 继续往下查找
}
return persons;
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
XML文件的解析和序列化的更多相关文章
- android菜鸟学习笔记19----Android数据存储(三)XML文件的解析及序列化
Android内置了PULL解析器的XPP3实现,以及SAX解析器等,可以直接使用PULL或SAX解析XML,直接把JAVA中进行PULL或SAX解析的代码直接拿来用,遗忘的话,可以参考java拾遗1 ...
- JDOM方法实现对XML文件的解析
首先要下载JDOM.jar包,下载地址:http://download.csdn.net/detail/ww6055/8880371 下载到JDOM.jar包之后导入到工程中去. 实例程序: book ...
- xml文件的解析
1. xml文件的解析 void CDataMgr::readStringData() { std::string xml_name = "config/string.xml"; ...
- [置顶] Android开发之XML文件的解析
Android系统开发之XML文件的解析 我们知道Http在网络传输中的数据组织方式有三种分别为:XML方式.HTML方式.JSON方式.其中XML为可扩展标记语言,如下: <?xml vers ...
- 类的反射及xml文件的解析
类的反射 xml文件的解析 .properties||.xml配置文件的创建及读取内容 //创建对象 Properties properties = new Properties(); //存储 pr ...
- JAVA读取XML文件并解析获取元素、属性值、子元素信息
JAVA读取XML文件并解析获取元素.属性值.子元素信息 关键字 XML读取 InputStream DocumentBuilderFactory Element Node 前言 最 ...
- 用SAX和PULL进行XML文件的解析与生成
XML解析有传统的dom方法还有Jsoup,SAX,PULL等,这里讲的是比较省内存的SAX和PULL方法.Android中极力推荐用PULL的方式来解析,我个人觉得pull确实比较简单,但其内部的逻 ...
- 【文件处理】xml 文件 DOM解析
一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...
- Java中使用DOM4J来生成xml文件和解析xml文件
一.前言 现在有不少需求,是需要我们解析xml文件中的数据,然后导入到数据库中,当然解析xml文件也有好多种方法,小编觉得还是DOM4J用的最多最广泛也最好理解的吧.小编也是最近需求里遇到了,就来整理 ...
随机推荐
- Nhibernate中多Or条件的查询,很多Or的查询
public IList<object[]> GetRequestAllByUserCodeUnitSysClassify1(string unitNo, string system, s ...
- http://www.cnblogs.com/dasenglin/p/5821987.html
一安装maven 先安装jdk,配置JAVA_HOME 把下载的maven bin包,解压到指定目录,比如:D:\apache-maven-3.3.9-bin 配置maven的系统变量M2_HOME和 ...
- Tomcat-redis-Nginx
环境:centos7, Tomcat7, redis-3.2,Nginx1.8,jdk-8u60-linux-x64 Nginx反向代理tomcat,redis作会话共享 一.Nginx安装 解决依赖 ...
- Linux下共享库嵌套依赖问题 (转载)
转自:http://my.oschina.net/moooofly/blog/506466 问题场景: 动态库 librabbitmq_r.so 内部依赖动态库 libevent_core.so 和 ...
- E20190414-hm
ease n. 安逸; 容易; 轻松,舒适; 不拘束,自在; (for/with ease of) repetition n. 重复,反复; 背诵; 复制品,副本; [乐] 复唱,复奏,重奏; gl ...
- bzoj 2039: [2009国家集训队]employ人员雇佣【最小割】
一开始在https://www.cnblogs.com/lokiii/p/10770919.html基础上连(i,j,b[i][j])建了个极丑的图T掉了--把dinic换成isap勉强能卡过 首先因 ...
- 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:8. 委托事件
文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...
- bzoj1475:方格取数
传送门 最小割,这也是个经典题了,当初学最小割时没学会,这次算是理解了,首先二分图染色,将整个图分成黑色点和白色点,由于相邻的格子不能同时选,一个黑点一定对应四个白点,也就是我们只能选择这个黑点或者四 ...
- 一篇文章带你搞懂 SpringBoot与Swagger整合
Swagger使用由于不喜欢csdn的markwoen编辑器,对代码样式支持不好,看着不舒服,对审美要求比较高的同学移步github:https://github.com/itguang/swagge ...
- day03 内部类