在开发中最常见的数据格式一般两种:Json和XML。今天介绍的是一个XML的解析库,因为它看起来最简单,同时还强调了XML的正确性。如果不是很了解什么是XML,还请自己查一下资料,我主要就XOM库关于怎么存储XML和解析XML做一下说明。


编写一个Person对象

它包括姓名,年龄,地址,你想要将他们序列化到XML 这个Person类有一个getXML()方法,它使用XOM来产生被转换XML的Element对象的Person数据。

public class Person {private String name;private String age;private String address;//一般的构造函数 public Person(String name, String age, String address) {this.name = name;this.age = age;this.address = address;}// XML解析数据 参数传递Element对象public Person(Element person){name = person.getFirstChildElement("name").getValue();age = person.getFirstChildElement("age").getValue();address = person.getFirstChildElement("address").getValue();}//方法生成一个Element节点public Element getXML(){// 生成一个person节点 它下面还有三个子节点 name age addressElement Node = new Element("person");// 生成一个name节点 并使用appendChild()填充数据Element Node_name = new Element("name");Node_name.appendChild(name);Element Node_age = new Element("age");Node_age.appendChild(age);Element Node_address = new Element("address");Node_address.appendChild(address);// 将三个子节点 name age address添加到父节点Person中Node.appendChild(Node_name);Node.appendChild(Node_age);Node.appendChild(Node_address);return Node;}

序列化生成XML

编写一个函数用来生成序列化数据,并将数据转换为数据流写入。参数OutputStream os 表示输出流, Document doc则是生成的完整的XML格式。

 public static void format(OutputStream os, Document doc) throws Exception{// Serializer参数 第一个为输出流  第二个为编码格式Serializer serializer = new Serializer(os,"UTF-8");serializer.setIndent(4);serializer.setMaxLength(60);serializer.write(doc);serializer.flush();}

反序列化获取Person对象

获取XML文件的File对象,使用XOM的Builder.build()方法打开并读取一个文件,使用getChildElements() 产生一个Element列表(不是一个标准的List 只是拥有size和get方法的对象) 注意,这里需要知道XML文件的确切结构。

            List<Person> people = new ArrayList<Person>();File file = new File(getExternalFilesDir(null), "person.xml");Document doc = new Builder().build(file);Elements elements = doc.getRootElement().getChildElements();for(int i = 0; i < elements.size(); i++){people.add(new Person(elements.get(i)));}//直接打印List容器中的数据即可

编写测试样例

        //1.序列化生成XMLList<Person> people = new ArrayList<Person>();people.add(new Person("zhengyan","24","wuhan"));people.add(new Person("wukong","26","beijing"));people.add(new Person("livvy","21","shenzheng"));people.add(new Person("susan","24","hk"));// 生成XML的根节点people 调用对象P的方法getXML() 组装成完整的XML数据Element root = new Element("people");for(Person p : people){root.appendChild(p.getXML());}// 生成要存储XML文件的File对象File file = new File(getExternalFilesDir(null), "person.xml");FileOutputStream fos = new FileOutputStream(file);//将Element对象的root传入Document的构造器中Document doc = new Document(root);// 序列化生成XMLPerson.format(fos, doc);

XML解析—开源XOM类库相关推荐

  1. java xml开源操作类,xml解析和操作的开源工具项目涵盖java c++ php 等语言

    XML解析器-Xerces    XML操作库-dom4j    XML文档解析器-Digester    J2ME-的XML-解析器-kXML XML解析类库-MXP1    XML解析器-LibX ...

  2. Phinecos(洞庭散人) 专注于开源技术的研究与应用 TinyXML:一个优秀的C++ XML解析器

    读取和设置xml配置文件是最常用的操作,试用了几个C++的XML解析器,个人感觉TinyXML是使用起来最舒服的,因为它的API接口和Java的十分类似,面向对象性很好. TinyXML是一个开源的解 ...

  3. ZXing是一个开源Java类库用于解析多种格式的条形码和二维码

    ZXing是一个开源Java类库用于解析多种格式的条形码和二维码 2014年05月07日 17:30:37 shine4j 阅读数 5677 blog迁移至:http://www.micmiu.com ...

  4. iOS中XML解析汇总

    在时间上TBXML占优,libxml2支持了边下载边解析. 来源:http://www.codeios.com/forum.php?mod=viewthread&tid=9880&hi ...

  5. IOS学习:常用第三方库(GDataXMLNode:xml解析库)

    IOS学习:常用第三方库(GDataXMLNode:xml解析库) 解析 XML 通常有两种方式,DOM 和 SAX: DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过 ...

  6. iOS中的XML解析

    解析方式分类: 解析 XML 通常有两种方式,DOM 和 SAX:DOM解析XML时,读入整个XML文档并构建一个驻留内存的树结构(节点树),通过遍历树结构可以检索任意XML节点,读取它的属性和值. ...

  7. iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组)

    关联:iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组) 在时间上TBXML占优,libxml2支持了边下载边解析. 来源:http://www.codeios.com/f ...

  8. XML解析的四种方式

    1.说明 XML是EXtensible Markup Language, 即可扩展标记语言, 是一种通用的数据交换格式, 它的平台无关性.语言无关性.系统无关性, 给数据集成与交互带来了极大的方便. ...

  9. XML解析及JSON解析

    目录 XML 1. XML简介 2. 特性 3. 语法格式 4. 例子 5. 部分Demo 注意: Demo1: 解析本地 XML文件 Demo2: 解析网络运营商接口返回的XML Demo3: 通过 ...

  10. XML解析器及相关概念介绍

    前几天看一本介绍JSP的书,上面有对XML解析器的介绍,但看不太懂,在网上搜了一些资料,看后发现原来书中写的不太正确. 通过这篇文章,把本人理解的关于XML解析器和Java下一些XML相关的概念介绍清 ...

最新文章

  1. 我的商汤实习年末总结
  2. matlab 手掌轮廓,CG_图片轮廓mask提取-matlab
  3. 斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning...
  4. 处理字符串_12_按照指定的位置截取字符
  5. Java之对List里面的对象名字进行模糊查询
  6. 数据库中的二级索引_普通索引_辅助索引
  7. python 并列条形图_python – 来自两个pandas数据框的分组条形图
  8. 学习opencv之cvtColor
  9. 记录远程桌面登录者的IP和MAC
  10. android开启热点softap模式,[RK3288][Android6.0] Wifi开启热点(SoftAP)流程小结
  11. mysql tcmalloc jemalloc_tcmalloc jemalloc 和ptmalloc 对比
  12. iOS URL Scheme 劫持-在未越狱的 iPhone 6上盗取支付宝和微信支付的帐号密码
  13. linux 安装phpMyAdmin
  14. android10图片保存,android10分区存储照片选择,拍照处理
  15. 切图直接导出html,Dreamweaver切图到生成网页的方法
  16. 使用keras的predict(),报错:SlowBackpropInput: input and out_backprop must have the same batch size
  17. Express中间件body-parser
  18. 万能素材库_2016万能高考作文素材大全
  19. 【转载】WIN10应用商店,Edge浏览器闪退打不开,开始菜单打不开,安全中心打开变空白
  20. Ueditor 图片上传配置

热门文章

  1. 李智慧 - 架构师训练营 第四周
  2. Processing 入门基础【秒懂小白篇】
  3. eplan窗口宏与符号宏是什么_电气设计||Eplan P8 宏功能的应用
  4. C/S模型(客户/服务器模型)
  5. react-app-rewired 修改 react 项目默认端口号
  6. 进入显示器工厂模式的方法! 【95种品牌,维修珍藏资料】
  7. 危机四伏,卡士酸奶的高端人设还立得住吗?
  8. error: Failed dependencies: perl(Data::Dumper) is needed by MySQL-server-5.6.46-1.el7.x8
  9. 计算机术语死机,计算机“死机”故障原因及处理办法大全
  10. 2021年最佳Selenium替代品