- 浏览: 168110 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
lilixu:
Netcdf (二) -
publicorprivate:
[b]atwr s [/b]
xml和实体对象相互转换 一步到位 -
mangolms:
讲得很好,顶一个
Java 线程入门 -
crawler:
lvwenwen 写道求问楼主自己学习的总结还是有什么相关的材 ...
第二章 面向对象的几个基本原则 -
lvwenwen:
求问楼主自己学习的总结还是有什么相关的材料
第二章 面向对象的几个基本原则
用Xstream完成xml与对象之间的相互转换,我在xstream包的基础上简单的封装了一下:
如以下xml:
<?xml version="1.0" encoding="UTF-8"?> <html> <body> <div id="div1" name="div"/> <form action="saveForm.asp" method="post"> <h1>请输入您的联系信息:</h1> <lable>名字:</lable> <p> <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/> <input type="reset" id="btn_res" name="btn_res" value="Reset"/> </p> </form> </body> </html>
想快速转换成对象。
第一步将xml分解成不同的对象如下,HtmlBean 为主体对象:
<html>标签:
@XStreamAlias("html") public class HtmlBean implements BaseConverterBean { private HtmlBody body; public HtmlBody getBody() { return body; } public void setBody(HtmlBody body) { this.body = body; } }
<body>标签:
@XStreamAlias("body") public class HtmlBody implements BaseConverterBean { private HtmlDiv div; private HtmlForm form; public HtmlForm getForm() { return form; } public void setForm(HtmlForm form) { this.form = form; } public HtmlDiv getDiv() { return div; } public void setDiv(HtmlDiv div) { this.div = div; } }
<div>标签:
@XStreamAlias("div") public class HtmlDiv implements BaseConverterBean { @XStreamAsAttribute private String id; @XStreamAsAttribute private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
<form>标签:
@XStreamAlias("form") public class HtmlForm implements BaseConverterBean { @XStreamAsAttribute private String action; @XStreamAsAttribute private String method; private String h1; private String lable; private HtmlP p; public String getAction() { return action; } public void setAction(String action) { this.action = action; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public String getH1() { return h1; } public void setH1(String h1) { this.h1 = h1; } public String getLable() { return lable; } public void setLable(String lable) { this.lable = lable; } public HtmlP getP() { return p; } public void setP(HtmlP p) { this.p = p; } }
<p>标签:
@XStreamAlias("p") public class HtmlP implements BaseConverterBean { @XStreamImplicit private List<HtmlInput> input; public List<HtmlInput> getInput() { return input; } public void setInput(List<HtmlInput> input) { this.input = input; } }
<input>标签:
@XStreamAlias("input") public class HtmlInput implements BaseConverterBean { @XStreamAsAttribute private String type; @XStreamAsAttribute private String id; @XStreamAsAttribute private String name; @XStreamAsAttribute private String value; public String getType() { return type; } public void setType(String type) { this.type = type; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getValue() { return value; } public void setValue(String value) { this.value = value; } }
第二步:利用xstream将xml文件转换为对象HtmlBean :
public class XMLToBeanConverterTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testToBean() { HtmlBean bean = null; XStream xstream = XstreamUtil.getDriverInstace(); String xml = getResourceFileContent(XMLToBeanConverterTest.class, "html.xml"); if(xml!=null && !"".equals(xml)){ bean = (HtmlBean)ConverterFactory.getXMLToBeanConverterInstance(xml).stringToBean(xstream, HtmlBean.class, true); } String divid = bean.getBody().getDiv().getId(); String expected = "div1"; assertEquals(expected, divid); } @SuppressWarnings("unchecked") public static String getResourceFileContent(Class c,String name){ StringBuffer sb = new StringBuffer(); try { InputStream input = c.getClassLoader().getResourceAsStream(name); BufferedReader reader = new BufferedReader(new InputStreamReader(input,"UTF-8")); String line = null; while ((line = reader.readLine()) != null) { sb.append(line); } reader.close(); input.close(); } catch (Exception e) { e.printStackTrace(); } return sb.toString(); } }
ConverterFactory:
/** * 转换器工厂 * * @author crawler * */ public class ConverterFactory { /** * 获得BeanToXMLConverter实例化对象 * * @param bean 实体Bean对象 * * @return BeanToXMLConverter 实例化对象 */ public static XMLConverter getBeanToXMLConverterInstance(BaseConverterBean bean) { return new BeanToXMLConverter(bean); } public static BeanConverter getXMLToBeanConverterInstance(String xml) { return new XMLToBeanConverter(xml); } }
XMLToBeanConverter:
/** * xml转换为对应的实体bean对象 * * @author crawler * */ public class XMLToBeanConverter implements BeanConverter { private String xml; public XMLToBeanConverter(String xml){ this.xml = xml; } @SuppressWarnings("unchecked") public BaseConverterBean stringToBean(XStream xstream,Class type,boolean isAttribute) { if(isAttribute){ xstream.processAnnotations(type); } return (BaseConverterBean)xstream.fromXML(xml); } }
第三步:将bean对象转换成xml:
public class BeanToXMLConverterTest { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } @Test public void testToXml() { HtmlBean bean = new HtmlBean(); HtmlBody body = new HtmlBody(); HtmlDiv div = new HtmlDiv(); HtmlForm form = new HtmlForm(); HtmlP p = new HtmlP(); List<HtmlInput> inputs = new ArrayList<HtmlInput>(); HtmlInput input = new HtmlInput(); input.setId("btn_sub"); input.setType("submit"); input.setName("btn_sub"); input.setValue("Submit"); HtmlInput input2 = new HtmlInput(); input2.setId("btn_res"); input2.setType("reset"); input2.setName("btn_res"); input2.setValue("Reset"); inputs.add(input); inputs.add(input2); p.setInput(inputs); div.setId("div1"); div.setName("div"); form.setAction("saveForm.asp"); form.setH1("请输入您的联系信息:"); form.setLable("名字:"); form.setMethod("post"); form.setP(p); body.setDiv(div); body.setForm(form); bean.setBody(body); XMLConverter converter = ConverterFactory.getBeanToXMLConverterInstance(bean); XStream xstream = XstreamUtil.getInstance(); // 将对象转换为xml文件 String xml = converter.toXml(xstream, bean.getClass(), true); Document doc = null; try { doc = DocumentHelper.parseText(xml); } catch (DocumentException e) { e.printStackTrace(); } if(doc!=null){ xml = doc.asXML(); } System.out.println(xml); } }
BeanToXMLConverter:
/** * 将bean对象转换为xml形式的转换器 * * @author crawler * */ public class BeanToXMLConverter implements XMLConverter { private BaseConverterBean bean; public BeanToXMLConverter(BaseConverterBean bean) { this.bean = bean; } @SuppressWarnings("unchecked") public String toXml(XStream xstream,Class type,boolean isAttribute) { if(isAttribute){ xstream.processAnnotations(type); } return xstream.toXML(bean); } }
打印结果:
<?xml version="1.0" encoding="UTF-8"?> <html> <body> <div id="div1" name="div"/> <form action="saveForm.asp" method="post"> <h1>请输入您的联系信息:</h1> <lable>名字:</lable> <p> <input type="submit" id="btn_sub" name="btn_sub" value="Submit"/> <input type="reset" id="btn_res" name="btn_res" value="Reset"/> </p> </form> </body> </html>
与顶部的xml完全一致。这样就完成了相互的转换很方便。
如果需要可以下载附件我贴上了我的Myeclipse工程,有对应的测试类和源码。
- XstreamConverter.zip (699.1 KB)
- 下载次数: 144
评论
6 楼
publicorprivate
2013-06-08
[b]atwr s [/b]
5 楼
ryan_pzq
2013-03-25
如果嵌套调用的,例如
<p>
<p></p>
</p>
这样的怎么解析,嵌套层次,位置不定
<p>
<p></p>
</p>
这样的怎么解析,嵌套层次,位置不定
4 楼
ychengIT
2012-09-25
不错 !!!
3 楼
yekui
2012-09-07
大哥,有意思么?
2 楼
crawler
2012-09-05
yjc2020 写道
用json就爽多了
xstream也支持json,不过一般存储数据以xml居多,json更多在于前后台交互。
1 楼
yjc2020
2012-09-05
用json就爽多了
发表评论
-
将博客搬至CSDN
2017-05-24 18:01 383将博客搬至CSDN -
Java基本类型与byte数组之间相互转换
2013-05-15 18:07 4362转:http://blog.sina.com.cn/s/bl ... -
Java 线程入门
2013-05-09 15:28 15251概念 线程,有时被称为轻量级进程(Lightweigh ... -
Java IO流 续
2013-05-08 09:39 13691.基于字节文件读写 FileInputStream和F ... -
Java IO流
2013-05-08 09:16 15541.流的概念 流是一个很形象的概念当程序需要读取数据的 ... -
EJB实体bean之间的关系-ORM
2013-05-06 08:05 12601.ORM: Object Relational ... -
第四章 简单工厂模式
2013-05-05 15:02 10601.简单工厂模式 简单工厂模式又叫做静态工厂方法模式。它 ... -
第三章 单例模式
2013-05-05 14:52 8903.1单例(Singleton)模式 保证一个类仅有一个 ... -
第二章 面向对象的几个基本原则
2013-05-05 14:42 23562.1 抽象类和接口 抽象类是可以继承一个抽象类 ... -
第一章 设计模式与简介
2013-05-05 14:16 11871.1什么是设计模式 人们在自己的环境中不断发现问题和寻 ... -
frameset session失效后 返回到 顶层登陆页面
2013-04-23 14:26 865采用frameset来布局网页的时候,可能由于session ... -
Xstream-xml和实体对象相互转换特殊问题
2012-09-06 18:39 6416之前发了一篇博文《xml和实体对象相互转换 一步到位 》 ... -
理解JMS
2012-09-06 16:31 2246首先JMS存在的理由: RPC(Remote proced ... -
系统权限设计
2012-09-05 21:56 1784主体对象: 1.用户 2. ... -
回望Java中的多线程并发(一)
2012-09-05 08:55 1774并发其实并不等于多线程,可以理解为多线程是实现并发的一种方式, ... -
回望Java中的final关键字
2012-09-03 15:25 2415final关键字可以理解为“这个东西不能改变”。之所以要禁止改 ... -
Java内存区域与内存溢出异常
2012-09-02 18:56 1454之前根据平时的积累总 ... -
Netcdf (二)
2011-05-26 19:34 5186附件文档: 4 NetCDF Java 4.1 概述( ... -
Netcdf (一)
2011-05-26 19:31 4262由于工作原因最近看了下Netcdf: NetCDF 1 N ... -
接口 实现类 抽象
2011-02-28 20:28 1035接口(Interface)是一个角色(Role), 实现类( ...
相关推荐
在Java开发中,将XML数据与Java实体类进行相互转换是非常常见的需求,这有助于简化数据处理和存储。本文将详细介绍如何使用工具类进行XML与实体类的转换,并探讨相关依赖和实现方法。 首先,XML转换为Java实体类的...
"XML文件与实体类的互相转换" XML文件与实体类的互相转换是软件开发中的一种常见需求,特别是在调用别的平台接口时,通常都是返回XML数据,然后需要将这些数据转换成实体,以便于更方便的操作。下面将详细介绍XML...
使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...
本文将详细介绍两种主要的XML与Java对象互相转换的方法:DOM(Document Object Model)解析和JAXB(Java Architecture for XML Binding)。 1. DOM解析: DOM是一种W3C标准,它将XML文档解析成一棵由节点组成的树,...
自己写的一个xml映射实体对象类,附件为一个AXIS客户端代码生成文档
本文实例讲述了C#实现XML与实体类之间相互转换的方法。分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System...
总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...
标题中的“java-xml自动生成对象实体以及与xml相互转化”指的是使用Java技术将XML文件转换为Java对象(即Java Bean),反之亦然。这一过程通常涉及到以下几个关键知识点: 1. **Java DOM解析器**:DOM(Document ...
.NET Framework也提供了`JavaScriptSerializer`和`DataContractJsonSerializer`处理JSON数据,同时`Json.NET`库(现在是.NET Standard的一部分)是JSON处理的常用选择,它支持XML和JSON的互相转换。 ### 7. 性能...
Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...
将XML数据转换为Java对象,能够方便地在两者之间进行数据操作和处理。在这个过程中,XStream库扮演了关键角色。 XStream是一个强大的Java库,它可以将Java对象序列化为XML,同时也能将XML反序列化为等效的Java对象...
本文将深入探讨如何使用C#将XML文件内容转换为List对象,以及涉及的两种实现方法。我们将主要关注以下知识点: 1. **XML解析基础**:C#中的System.Xml命名空间提供了一系列类来解析和操作XML文档,如XmlDocument、...
xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用
本教程将探讨如何在C#中将XML文件内容转换为`List<T>`对象,以便更方便地操作和处理数据。 首先,我们需要理解`List<T>`是C#中的一个泛型集合类,它继承自`Collection<T>`,可以存储同一类型的元素列表。`T`代表你...
总结,JAXB是Java中实现XML数据和Java对象之间无缝转换的强大工具,尤其在WebService开发中扮演着重要角色。通过理解JAXB的工作原理和使用方式,开发者可以更高效地处理XML数据,提升应用程序的性能和可维护性。
5. **生成序列化和反序列化代码**:为了方便XML数据和Java对象之间的转换,工具还会生成解析XML和生成XML的代码,通常是基于JAXB(Java Architecture for XML Binding)或其他类似库。 除了XSD转Java,有些工具还...
Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准技术。它允许我们将XML文档转换为Java对象,反之亦然,这样就能方便地在XML和Java应用程序之间交换数据。在Java SE...
"xml和matlab格式相互转换工具箱"是针对这一问题设计的,它提供了一个便捷的解决方案。这个工具箱包含了一系列函数,能够高效地实现XML文件与MATLAB结构体之间的转换。MATLAB结构体是一种类似于JSON或字典的数据结构...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...