`

xml和实体对象相互转换 一步到位

阅读更多

用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工程,有对应的测试类和源码。

2
0
分享到:
评论
6 楼 publicorprivate 2013-06-08  
[b]atwr s [/b]
5 楼 ryan_pzq 2013-03-25  
如果嵌套调用的,例如
<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就爽多了

相关推荐

    XML文件与实体类的互相转换

    "XML文件与实体类的互相转换" XML文件与实体类的互相转换是软件开发中的一种常见需求,特别是在调用别的平台接口时,通常都是返回XML数据,然后需要将这些数据转换成实体,以便于更方便的操作。下面将详细介绍XML...

    xml与实体类转换工具

    在Java开发中,将XML数据与Java实体类进行相互转换是非常常见的需求,这有助于简化数据处理和存储。本文将详细介绍如何使用工具类进行XML与实体类的转换,并探讨相关依赖和实现方法。 首先,XML转换为Java实体类的...

    xml和java对象互相转换的两种方法

    本文将详细介绍两种主要的XML与Java对象互相转换的方法:DOM(Document Object Model)解析和JAXB(Java Architecture for XML Binding)。 1. DOM解析: DOM是一种W3C标准,它将XML文档解析成一棵由节点组成的树,...

    好用的xStream XML和JAVA对象互相转换的简单示例

    XStream是一个轻量级、高性能的库,能够将Java对象序列化为XML,同时也能将XML反序列化回Java对象,实现XML和Java对象的互相转换。 首先,我们需要引入XStream库。在给定的描述中提到了两个依赖文件:xstream-1.3.1...

    XML与Java对象互相转化Demo(Eclipse)

    在Java编程中,XML与Java对象的相互转化是常见的需求,特别是在持久化、配置文件处理或网络通信中。本教程通过一个Eclipse项目演示了如何实现这一转化。 首先,我们需要理解XML文档的基本结构。XML文档由元素...

    任意XML转实体类 实体类 转XML 方法 JAVA

    总结一下,XML转实体类和实体类转XML涉及的主要知识点有:Java反射API、XML解析(DOM、SAX、StAX、JAXB),以及对象的序列化和反序列化。在实际开发中,我们需要根据项目需求选择合适的工具和方法,确保数据的准确...

    C#实现XML与实体类之间相互转换的方法(序列化与反序列化)

    本文实例讲述了C#实现XML与实体类之间相互转换的方法。分享给大家供大家参考,具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System...

    java-xml自动生成对象实体以及与xml相互转化.zip_Java doc转xml_java xml 转 实体_java 毕

    标题中的“java-xml自动生成对象实体以及与xml相互转化”指的是使用Java技术将XML文件转换为Java对象(即Java Bean),反之亦然。这一过程通常涉及到以下几个关键知识点: 1. **Java DOM解析器**:DOM(Document ...

    C#对象和Xml对象的相互转化

    .NET Framework也提供了`JavaScriptSerializer`和`DataContractJsonSerializer`处理JSON数据,同时`Json.NET`库(现在是.NET Standard的一部分)是JSON处理的常用选择,它支持XML和JSON的互相转换。 ### 7. 性能...

    xml和JAVA对象转换 simple-xml2object

    simple-xml2object是一个简单实用的xml和JAVA对象转换的类库,jar包很小,而且不需要任何依赖包。 下载后,压缩包包含一个jar包,导入即可。包含一个测试类,有详细的注释展示用法。还包含一个中文文档。

    JAXB工具类 xml转为java对象 java对象转为xml

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准API。它使得在Java应用程序中使用XML数据变得更加方便,无需手动编写大量的转换代码。本教程将详细介绍JAXB如何实现...

    XML转换为JAVA对象的方法

    将XML数据转换为Java对象,能够方便地在两者之间进行数据操作和处理。在这个过程中,XStream库扮演了关键角色。 XStream是一个强大的Java库,它可以将Java对象序列化为XML,同时也能将XML反序列化为等效的Java对象...

    C# XmlToList xml转换成对象,Xml转对象

    本文将深入探讨如何使用C#将XML文件内容转换为List对象,以及涉及的两种实现方法。我们将主要关注以下知识点: 1. **XML解析基础**:C#中的System.Xml命名空间提供了一系列类来解析和操作XML文档,如XmlDocument、...

    xml报文和java对象互相转换 相关jar包和测试代码

    xml报文和java对象互相转换 相关jar包和测试代码,可以与castor插件java对象和XML自动绑定maping文件生成和java对象一键生成工具1.2(https://download.csdn.net/download/kemoing/10864595)完美配合使用

    C# xmlToList xml转换成对象

    本教程将探讨如何在C#中将XML文件内容转换为`List&lt;T&gt;`对象,以便更方便地操作和处理数据。 首先,我们需要理解`List&lt;T&gt;`是C#中的一个泛型集合类,它继承自`Collection&lt;T&gt;`,可以存储同一类型的元素列表。`T`代表你...

    xml转换java对象

    在Java编程中,我们经常需要将XML文件的数据转换为Java对象,以便于处理和操作。Apache Commons Betwixt库提供了一种简单的方法来实现这个转换。 Apache Commons Betwixt是Apache软件基金会的一个项目,它提供了一...

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    总结,JAXB是Java中实现XML数据和Java对象之间无缝转换的强大工具,尤其在WebService开发中扮演着重要角色。通过理解JAXB的工作原理和使用方式,开发者可以更高效地处理XML数据,提升应用程序的性能和可维护性。

    jaxb xml转化为对象,对象转化为xml,xml转化为xsd,表转化为对象

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准技术。它允许我们将XML文档转换为Java对象,反之亦然,这样就能方便地在XML和Java应用程序之间交换数据。在Java SE...

    xml和matlab格式相互转换工具箱

    "xml和matlab格式相互转换工具箱"是针对这一问题设计的,它提供了一个便捷的解决方案。这个工具箱包含了一系列函数,能够高效地实现XML文件与MATLAB结构体之间的转换。MATLAB结构体是一种类似于JSON或字典的数据结构...

Global site tag (gtag.js) - Google Analytics