- 浏览: 918249 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (263)
- J2EE (9)
- Spring (11)
- Hibernate (11)
- Struts (5)
- opensource (19)
- Hadoop (28)
- 架构设计 (8)
- 企业应用 (10)
- SNMP (8)
- SSO (4)
- webservice (11)
- RPC (2)
- 编程语言 (0)
- Java (30)
- Javascript (5)
- NoSQL (11)
- 数据库 (0)
- oracle (8)
- MySQL (3)
- web (1)
- Android (2)
- Linux (15)
- 软件工具 (15)
- 项目构建 (11)
- 测试工具 (2)
- Exception (19)
- 杂谈 (4)
- Groovy (5)
- Nodejs (1)
- MacOSX (4)
最新评论
-
fighhin:
decode(BinaryBitmap,java.util.M ...
条形码/二维码之开源利器ZXing图文介绍 -
u013489005:
追问:楼主,请问有中文文档么?我的邮箱是frankgray@s ...
Java表达式计算引擎:Expr4J -
u013489005:
感谢博主 需要引入的包是import java.io.*;im ...
Java表达式计算引擎:Expr4J -
calosteward:
感谢楼主分享。。 Zxing 我听说过的。__________ ...
条形码/二维码之开源利器ZXing图文介绍 -
u013810758:
judasqiqi 写道感谢楼主!想请问楼主一下这个生成的图片 ...
Java实现二维码QRCode的编码和解码
blog迁移至 :http://www.micmiu.com
之前曾写过一blog : XStream序列化JAVA对象为XML以及反序列化 (http://sjsky.iteye.com/blog/784434),今天介绍另一个Java Bean<->XML 之间序列化和反序列化的轻量级工具:Simple
官网:http://simple.sourceforge.net/home.php
截止目前最新版本(附近可下载):simple-xml-2.6.1.jar
特点:
- jar lib文件只有360K左右的大小
- 它的使用不需要依赖于其他 JAR 文件
- 通过注解的方式,灵活方便
下面将分节详细介绍Simple的特点和使用方法:
- [一]、简单bean的序列化和反序列化
- [二]、自定义节点名称
- [三]、嵌套对象
- [四]、可选的非强制性的元素或属性
- [五]、List<Object>处理
- [六]、inline 参数用法
- [七]、构造函数的注解处理
[一]、简单bean的序列化和反序列化
1.java bean
package michael.serialization.simplexml; import java.util.Date; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * * @blog http://sjsky.iteye.com * @author Michael */ @Root public class MyTestVo { @Element private String userName; @Attribute private String wife; @Attribute private String realName; @Element private Date bornDate; @Element private Double height; public String toString() { return "MyTestVo : [ userName = " + userName + " , wife = " + wife + " , realName = " + realName + " , height = " + height + " , bornDate = " + bornDate + " ]"; } //省略set get等方法 ...... }
2.序列化
public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; MyTestVo vo = new MyTestVo(); vo.setUserName("michael"); vo.setRealName("大大"); vo.setWife("小小"); vo.setHeight(173.3d); vo.setBornDate(new Date()); try { Serializer serializer = new Persister(); File result = new File(xmlpath); serializer.write(vo, result); } catch (Exception e) { e.printStackTrace(); } }
序列化成功生成的simple_testvo.xml文件如下:
<myTestVo wife="小小" realName="大大"> <userName>michael</userName> <bornDate>2011-09-28 17:39:59.432 CST</bornDate> <height>173.3</height> </myTestVo>
ps: 注解可以把Java的属性序列化时指定为属性或者节点元素
3.反序列化
把上述生成的XML文件反序列化成Java bean测试代码:
public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; Serializer serializer = new Persister(); File source = new File(xmlpath); try { MyTestVo vo = serializer.read(MyTestVo.class, source); System.out.println(vo); } catch (Exception e) { e.printStackTrace(); } }
如果XML中包括中文字符有可能反序列化时会报错,以utf-8的编码读取XML文件即可,故修改代码如下:
/** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; Serializer serializer = new Persister(); try { InputStreamReader is = new InputStreamReader(new FileInputStream( xmlpath), "utf-8"); PropertyList parseVo = serializer.read(PropertyList.class, is); System.out.println(parseVo); } catch (Exception e) { e.printStackTrace(); } }
运行反序列化,打印Java bean信息如下:
[二]、自定义节点名称
1.java bean
package michael.serialization.simplexml; import java.util.Date; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root(name = "MyTest") public class MyTestVo { @Element private String userName; @Attribute(name = "MyWife") private String wife; @Attribute private String realName; @Element(name = "born") private Date bornDate; @Element private Double height; @Override public String toString() { return "MyTestVo : [ userName = " + userName + " , wife = " + wife + " , realName = " + realName + " , height = " + height + " , bornDate = " + bornDate + " ]"; } //set get ...... }
2.序列化
序列化后生成的simple_testvo.xml文件如下:
<MyTest MyWife="小小" realName="大大"> <userName>michael</userName> <born>2011-09-28 21:47:37.455 CST</born> <height>173.3</height> </MyTest>
可以和之前的序列化XML文件对比下,看看区别在哪里。
3.反序列化
运行反序列化程序后的打印结果如下:
[三]、嵌套对象
1.java bean
package michael.serialization.simplexml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class ConfigurationVo { @Element private ServerVo server; @Attribute private int id; public ServerVo getServer() { return server; } public int getId() { return id; } public void setServer(ServerVo pServer) { server = pServer; } public void setId(int pId) { id = pId; } }
package michael.serialization.simplexml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class ServerVo { @Attribute private int port; @Element private String host; @Element private SecurityVo security; public int getPort() { return port; } public String getHost() { return host; } public SecurityVo getSecurity() { return security; } public void setPort(int pPort) { port = pPort; } public void setHost(String pHost) { host = pHost; } public void setSecurity(SecurityVo pSecurity) { security = pSecurity; } }
package michael.serialization.simplexml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class SecurityVo { @Attribute private boolean ssl; @Element private String keyStore; public boolean isSsl() { return ssl; } public String getKeyStore() { return keyStore; } public void setSsl(boolean pSsl) { ssl = pSsl; } public void setKeyStore(String pKeyStore) { keyStore = pKeyStore; } }
2.序列化
/** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; SecurityVo security = new SecurityVo(); security.setSsl(true); security.setKeyStore("Michael"); ServerVo server = new ServerVo(); server.setHost("sjsky.iteye.com"); server.setPort(8088); server.setSecurity(security); ConfigurationVo config = new ConfigurationVo(); config.setId(10000); config.setServer(server); Serializer serializer = new Persister(); try { File xmlFile = new File(xmlpath); serializer.write(config, xmlFile); } catch (Exception e) { e.printStackTrace(); } }
运行上述方法,序列化生成的XML文件如下:
<configurationVo id="10000"> <server port="8088"> <host>sjsky.iteye.com</host> <security ssl="true"> <keyStore>Michael</keyStore> </security> </server> </configurationVo>
3.反序列化的方法和之前的一致,自己 可以 测试下结果是否正确。
[四]、可选的非强制性的元素或属性
1.java bean
package michael.serialization.simplexml; import java.util.Date; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class MyTestVo { @Element private String userName; // 不是每个人都有妻子的 吼吼 @Attribute(required = false) private String wife; @Attribute private String realName; // 不想泄露年龄噢 @Element(required = false) private Date bornDate; @Element private Double height; @Override public String toString() { return "MyTestVo : [ userName = " + userName + " , wife = " + wife + " , realName = " + realName + " , height = " + height + " , bornDate = " + bornDate + " ]"; } //省略setter getter方法 }
2.序列化
/** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; MyTestVo vo = new MyTestVo(); vo.setUserName("michael"); vo.setRealName("大大"); vo.setHeight(173.3d); Serializer serializer = new Persister(); try { File xmlFile = new File(xmlpath); serializer.write(vo, xmlFile); } catch (Exception e) { e.printStackTrace(); } }
运行序列化程序后生成的XML文件如下:
<myTestVo realName="大大"> <userName>michael</userName> <height>173.3</height> </myTestVo>
3.反序列化
运行反序列化程序后打印结果如下:
[五]、List<Object>处理
1.java bean
package michael.serialization.simplexml; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.ElementList; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class PropertyList { @ElementList private List<EntryVo> list; @Attribute private String name; public List<EntryVo> getList() { return list; } public String getName() { return name; } public void setList(List<EntryVo> pList) { list = pList; } public void setName(String pName) { name = pName; } @Override public String toString() { return "PropertyList : [ name = " + name + " , EntryVo list size = " + list.size() + " ] ."; } }
package michael.serialization.simplexml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class EntryVo { @Attribute private String name; @Element private String value; public String getName() { return name; } public String getValue() { return value; } public void setName(String pName) { name = pName; } public void setValue(String pValue) { value = pValue; } }
2.序列化
/** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String xmlpath = "d:/test/michael/simple_testvo.xml"; Serializer serializer = new Persister(); try { PropertyList vo = initBean(); serializer.write(vo, new File(xmlpath)); } catch (Exception e) { e.printStackTrace(); } } private static PropertyList initBean() { PropertyList vo = new PropertyList(); vo.setName("Wife List"); List<EntryVo> subList = new ArrayList<EntryVo>(); EntryVo subvo = new EntryVo(); subvo.setName("A"); subvo.setValue("福晋"); subList.add(subvo); subvo = new EntryVo(); subvo.setName("B"); subvo.setValue("侧福晋"); subList.add(subvo); subvo = new EntryVo(); subvo.setName("C"); subvo.setValue("小三"); subList.add(subvo); subvo = new EntryVo(); subvo.setName("D"); subvo.setValue("二奶"); subList.add(subvo); vo.setList(subList); return vo; }
运行序列化程序后生成的XML文件如下:
<propertyList name="Wife List"> <list class="java.util.ArrayList"> <entryVo name="A"> <value>福晋</value> </entryVo> <entryVo name="B"> <value>侧福晋</value> </entryVo> <entryVo name="C"> <value>小三</value> </entryVo> <entryVo name="D"> <value>二奶</value> </entryVo> </list> </propertyList>
3.反序列化,运行结果打印对象信息如下:
4.修改注解@ElementList的参数
@ElementList(name = "WifeList", entry = "wife") private List<EntryVo> list;
序列化后生成的XML文件如下:
<propertyList name="Wife List"> <WifeList class="java.util.ArrayList"> <wife name="A"> <value>福晋</value> </wife> <wife name="B"> <value>侧福晋</value> </wife> <wife name="C"> <value>小三</value> </wife> <wife name="D"> <value>二奶</value> </wife> </WifeList> </propertyList>
注意XML文件的变化。
[六]、 inline 参数用法
1.java bean
以上节中得bean为基础修改注解如下:
@Root public class PropertyList { @ElementList(name = "WifeList", entry = "wife", inline = true) private List<EntryVo> list; @Attribute private String name; public List<EntryVo> getList() { return list; } public String getName() { return name; } public void setList(List<EntryVo> pList) { list = pList; } public void setName(String pName) { name = pName; } @Override public String toString() { return "PropertyList : [ name = " + name + " , EntryVo list size = " + list.size() + " ] ."; } }
2.序列化后生成的XML文件如下:
<propertyList name="Wife List"> <wife name="A"> <value>福晋</value> </wife> <wife name="B"> <value>侧福晋</value> </wife> <wife name="C"> <value>小三</value> </wife> <wife name="D"> <value>二奶</value> </wife> </propertyList>
和上节生成的文件相比,XML结构少了一个层次。
[七]、构造函数的注解处理
1.java bean
package michael.serialization.simplexml; import org.simpleframework.xml.Attribute; import org.simpleframework.xml.Element; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; /** * @blog http://sjsky.iteye.com * @author Michael */ @Root public class EntryVo { public EntryVo(@Attribute(name = "name") String name, @Element(name = "value") String value) { this.name = name; this.value = value; } @Attribute(name = "name") private String name; @Element(name = "value") private String value; public String getName() { return name; } public String getValue() { return value; } public void setName(String pName) { name = pName; } public void setValue(String pValue) { value = pValue; } @Override public String toString() { return "EntryVo : [ name = " + name + ", value = " + value + " ]."; } }
2.序列化
生成的XML文件如下:
<value>http://sjsky.iteye.com</value>
</entryVo>
3.反序列化
反序列化生成的bean的信息打印如下:
ps:如果java bean有参数的构函数,需要在构造函数的参数前也加上相应的注解,否则在反序列化时会出错。
本文就先介绍到这,下次再介绍其他运用事例。
本文连接:http://sjsky.iteye.com/blog/1182057
转载请注明来自:Michael's blog @ http://sjsky.iteye.com
----------------------------- 分 ------------------------------ 隔 ------------------------------ 线 ------------------------------
- simple-xml-2.6.1.jar (360.1 KB)
- 下载次数: 121
发表评论
-
github更新自己Fork的代码
2014-03-09 22:52 1190github上有个功能叫fork,可以将别人的工程复制 ... -
Eclipse+OpenORB+ORBStudio配置CORBA开发环境
2013-10-24 09:04 1715目录 准备工作 整合配置 [一]、准备工作 -
openfire数据库配置说明
2013-04-26 11:29 1699数据库配置是在 conf/openfire.xml ... -
Shiro在web应用中实现验证码功能
2013-04-09 11:44 2963目录结构: 概述 扩展shiro认证 验证码工具 ... -
Openfire插件开发坏境配置指南
2013-03-19 14:24 965本文主要是介绍Openfire插件开发的环境配置,该指南是在 ... -
Openfire源码导入Eclipse编译配置指南
2013-03-19 09:26 3552本文将图文介绍如何把openfire(以3.8.1为例)源码 ... -
Openfire服务端安装和配置
2013-03-19 09:24 1088图文详细介绍Openfire服务端安装和配置的过程 ... -
iText实现直接把URL网页内容生成PDF
2012-11-28 10:44 3402目录: 概述 软件要求 实现过程 ... -
iText XML Worker实现HTML转PDF
2012-11-27 09:47 1853目录: 概述 两种应用场景的实现 ... -
iText XML Worker修改源码完美支持HTML中文字符转PDF
2012-11-27 08:59 2396目录: 介绍 中文字符转换 转换 ... -
iText生成PDF的书签
2012-11-26 13:46 2038主要演示iText生成PDF的书签功能,基本介绍详见代码中的注 ... -
iText生成PDF入门
2012-11-26 09:30 1127目录: 介绍 实验环境 入门 ... -
jldap实现Java对LDAP的基本操作
2012-07-03 15:17 2299目录: 概述 基本操作 查询 添加 删除 ... -
dom4j使用小结(基础入门级)
2011-11-08 15:11 2570blog迁移至 :http://www.micmiu. ... -
Open Flash Chart2实现动态曲线图小结
2011-04-18 10:49 6400blog迁移至:http://www.micmiu.c ... -
HttpClient、HTMLParser解决Google搜索结果的页面无法解析问题
2010-11-04 09:20 4572blog迁移至:http://www.micmiu.c ... -
HTMLParser初试
2010-11-03 09:22 1942blog迁移至:http://www.micmiu.c ... -
Open Flash Chart2应用(实现flash另存为图片)
2010-04-22 08:43 8661blog迁移至:http://www.micmiu.c ...
相关推荐
"Simple XML Editor"是一款基于Java开发的开源软件,专门用于XML文档的编辑和处理。XML(eXtensible Markup Language)是一种标记语言,常用于数据交换、存储和结构化信息的表述。这款编辑器旨在为用户提供一个简洁...
《深入理解Simple XML库:解析与应用》 在IT行业中,数据交换和序列化是常见的需求,XML作为标准的数据交换格式,广泛应用于各种系统间的数据交互。然而,XML的复杂性有时会给开发者带来困扰,因此出现了许多简化...
SAX解析xml数据。比较麻烦的是,每份需要解析的xml数据对应的都需要创建相应的DefaultHandler2类,如果App后台接口较多的话,需要创建的解析后台数据的DefaultHandler2类也就...这种情况下建议还是使用simple-xml解析
赠送jar包:simple-xml-safe-2.7.1.jar; 赠送原API文档:simple-xml-safe-2.7.1-javadoc.jar; 赠送源代码:simple-xml-safe-2.7.1-sources.jar; 赠送Maven依赖信息文件:simple-xml-safe-2.7.1.pom; 包含翻译后...
描述 "a simple xml dom parser" 暗示这是一个简化版的DOM解析器,它可能具有以下特点: 1. 易于使用:面向非专业XML开发者,提供简单直观的API。 2. 轻量级:相比于完整的DOM解析器,它可能占用更少的资源,适合...
标题“Simple-XML-PrefixHack:将Hacking前缀为Simple XML Android Framework,现在该库接受具有namepacing的重复元素”暗示了一个针对Simple XML库的改进或扩展,解决了处理XML命名空间中重复元素的问题。...
**简单XML库(Simple-XML)详解** 在Java开发中,XML作为一种标准的数据交换格式,被广泛用于存储和传输数据。然而,XML的解析和序列化通常需要借助于专门的库来实现,其中Simple-XML就是一个高效且易于使用的库。...
**GSA Simple XML Parser** 是一个基于PHP的开源XML解析器,它采用了DOM(Document Object Model)风格的设计,使得开发者能够方便地处理XML文档。在理解这个解析器之前,我们首先需要了解XML(eXtensible Markup ...
"Simple XML Parser"正是这样一种专为小型设备设计的开源XML解析器,它专注于XML的子集,不支持实体和名称空间,以简化解析过程并降低内存需求。 开源软件意味着源代码对公众开放,允许用户自由地查看、使用、修改...
simple-xml-safe-2.7.1.jar
开源的“Super Simple XML”库针对XML解析提供了一种轻量级且易于上手的解决方案。它不完全遵循W3C(World Wide Web Consortium)的标准规范,但满足了基础的XML解析需求,特别适合对性能和简洁性有较高要求的项目。...
**Simple XML Configuration Library 开源解析库** Simple XML Configuration Library 是一个专为解析简单配置文件而设计的开源XML库。这个库特别关注于易用性和可移植性,使其能够在多种操作系统上运行,包括* nix...
simple-xml-2.6.2.jar主要用于模拟报文的类库,有需要的可以下载
《深入理解Simple-XML库:解析与应用》 在当今的软件开发中,XML(Extensible Markup Language)作为数据交换和存储的标准格式,扮演着重要的角色。为了方便开发者高效地处理XML,各种解析库应运而生,其中Simple-...
dsx(Java的Damn Simple Xml) 该库利用方法链。 它与Java XML Standard API不兼容。 它包含与Microsoft XmlSerializer输入/输出XML格式兼容的序列化程序。 它包含另一个Microsoft兼容的序列化器,其行为类似于...
简单XML库(Simple XML)是Java中一个轻量级、高效的XML序列化和反序列化库,非常适合处理XML格式的数据。 首先,让我们了解Retrofit的基本概念。Retrofit由Square公司开发,它允许开发者通过简单的注解将HTTP操作...
Perl中的XML::Simple模块是Perl社区广泛使用的XML解析器,尤其适合处理小型或结构简单的XML文档。这个模块的名称虽然包含“Simple”,但它实际上提供了一种简洁的接口,用于将XML数据转换为Perl数据结构,反之亦然。...
"libxmldiff - Simple XML Diff Library-开源" 指的是一个名为libxmldiff的开源库,它专为XML(eXtensible Markup Language)文件设计,提供了比较XML文档差异的功能。这个库的核心是提供简单的API,使得开发者能够...
XML(eXtensible Markup Language)是一种用于标记数据的语言,被广泛应用于数据交换、配置文件、文档存储等领域。在Delphi编程环境中,处理XML文件通常需要用到解析库或控件,而"SimpleXML"可能就是一个这样的组件...
Simple 是一个 Java 框架,用于简化序列化和反序列化 XML 的过程。使用 Simple,开发人员可以简化(名字由此而来)将简单老 Java 对象(POJO)转换成 XML 文档的过程 — 即所谓的序列化(serialization)过程。...