`
德安德鲁
  • 浏览: 44941 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

XStream-实现XML解析,生成与之对应的Java bean

阅读更多

Xstream常用注解: 
@XStreamAlias("message") :

  别名注解  

作用目标: 类,字段  

@XStreamImplicit

隐式集合 

@XStreamImplicit(itemFieldName="subElementName")  
作用目标:

集合字段  

@XStreamConverter(SingleValueCalendarConverter.class)

注入转换器  
作用目标: 对象  

@XStreamAsAttribute 转换成属性  
作用目标: 字段  

@XStreamOmitField 忽略字段  
作用目标: 字段  

隐式集合: 
当我们使用集合类时不想显示集合,只显示里面的元素即可. 
使用隐式集合前: 
<list> 
 <element /> 
 <element /> 
<list> 

使用隐式集合后: 
 <element /> 
 <element /> 

解析XML生成java bean代码示例:

xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<family>
	<phone>1234</phone>
	<address>shan'xi xi'an</address>
	<sports>football,basketball</sports>
	<members>
		<member role="father">
			<name>john</name>
			<age>42</age>
			<gender>man</gender>
		</member>
		<member role="mother">
			<name>lili</name>
			<age>40</age>
			<gender>women</gender>
		</member>
		<member role="son">
			<name>west</name>
			<age>5</age>
			<gender>man</gender>
		</member>
	</members>
</family>

 定义Family模型.

注:Family模型中sports属性为List<String>,即从xml读取的”football,basketball“要转化为List

所以自定义一个SportsConverter,并在sports属性上面增加注解

@XStreamConverter(SportsConverter.class)

/**
 * 
 */
package xStream;

import java.io.Serializable;
import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;

/**
 * @author Administrator
 * 
 */
@XStreamAlias("family")
public class Family implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 2666558275262597117L;
	
	@XStreamAlias("phone")
	private String telephone;
	
	private List<Person> members;
	
	private String address;
	
	@XStreamConverter(SportsConverter.class)
	private List<String> sports;
	
	public String getTelephone()
	{
		return telephone;
	}
	
	public void setTelephone(String telephone)
	{
		this.telephone = telephone;
	}
	
	public List<Person> getMembers()
	{
		return members;
	}
	
	public void setMembers(List<Person> members)
	{
		this.members = members;
	}
	
	public String getAddress()
	{
		return address;
	}
	
	public void setAddress(String address)
	{
		this.address = address;
	}
	
	public List<String> getSports()
	{
		return sports;
	}
	
	public void setSports(List<String> sports)
	{
		this.sports = sports;
	}
	
	@Override
	public String toString()
	{
		return "Family [address=" + address + ", members=" + members
				+ ", sports=" + sports + ", telephone=" + telephone + "]";
	}
	
}

 

package xStream;

import java.io.Serializable;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamConverter;
import com.thoughtworks.xstream.converters.extended.ToStringConverter;

@XStreamAlias("member")
public class Person implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -7139978490881468546L;
	
	@XStreamAsAttribute
	private String role;
	
	private String name;
	
	private String gender;
	
	private String age;
	
	public String getRole()
	{
		return role;
	}
	
	public void setRole(String role)
	{
		this.role = role;
	}
	
	public String getName()
	{
		return name;
	}
	
	public void setName(String name)
	{
		this.name = name;
	}
	
	public String getGender()
	{
		return gender;
	}
	
	public void setGender(String gender)
	{
		this.gender = gender;
	}
	
	public String getAge()
	{
		return age;
	}
	
	public void setAge(String age)
	{
		this.age = age;
	}
	
	@Override
	public String toString()
	{
		return "Person [age=" + age + ", gender=" + gender + ", name=" + name
				+ ", role=" + role + "]";
	}
	
}

 

自定义一个SportsConverter.java实现将String转化为List<String>

 

/**
 * 
 */
package xStream;

import java.util.ArrayList;
import java.util.List;

import com.thoughtworks.xstream.converters.Converter;
import com.thoughtworks.xstream.converters.MarshallingContext;
import com.thoughtworks.xstream.converters.UnmarshallingContext;
import com.thoughtworks.xstream.io.HierarchicalStreamReader;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;

/**
 * @author Administrator
 * 
 */
public class SportsConverter implements Converter
{
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.thoughtworks.xstream.converters.Converter#marshal(java.lang.Object,
	 * com.thoughtworks.xstream.io.HierarchicalStreamWriter,
	 * com.thoughtworks.xstream.converters.MarshallingContext)
	 */
	@Override
	public void marshal(Object obj,
			HierarchicalStreamWriter hierarchicalstreamwriter,
			MarshallingContext marshallingcontext)
	{
		// TODO Auto-generated method stub
		
	}
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.thoughtworks.xstream.converters.Converter#unmarshal(com.thoughtworks
	 * .xstream.io.HierarchicalStreamReader,
	 * com.thoughtworks.xstream.converters.UnmarshallingContext)
	 */
	@Override
	public Object unmarshal(HierarchicalStreamReader reader,
			UnmarshallingContext unmarshallingcontext)
	{
		List<String> sportsList = new ArrayList<String>();
		try
		{
			String sportCollect = reader.getValue();
			String[] sports = sportCollect.split(",");
			if ((null != sports) && (0 != sports.length))
			{
				for (String string : sports)
				{
					sportsList.add(string);
				}
				
			}
			
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		return sportsList;
	}
	
	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * com.thoughtworks.xstream.converters.ConverterMatcher#canConvert(java.
	 * lang.Class)
	 */
	@Override
	public boolean canConvert(Class class1)
	{
		return class1.equals(ArrayList.class);
	}
}

 

/**
 * 
 */
package xStream;

import java.io.File;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.Dom4JDriver;

/**
 * @author Administrator
 * 
 */
public class XStream2JaveBean
{
	
	/**
	 * @param args
	 */
	public static void main(String[] args)
	{
		XStream xStream = new XStream(new Dom4JDriver());
		xStream.processAnnotations(Family.class);
		xStream.processAnnotations(Person.class);
		
		Family family = (Family) xStream.fromXML(new File("d:\\NewFile.xml"));
		System.out.println(family);
	}
}

 执行XStream2JaveBean的main函数。结果如下:

Family [address=shan'xi xi'an, members=[Person [age=42, gender=man, name=john, role=father], Person [age=40, gender=women, name=lili, role=mother], Person [age=5, gender=man, name=west, role=son]], sports=[football, basketball], telephone=1234]
 

 成功获取到XML对应的Family java模型。

分享到:
评论

相关推荐

    xstream+xmlpull xml to bean &&bean to xml

    2. kxml2-2.3.0.jar:这是一个轻量级的XML解析器,常被XStream用来作为XML读写的底层实现。KXML2提供了XML解析和生成的功能,对于那些不需要DOM或SAX完整功能的简单应用来说,它是一个很好的选择。 3. xmlpull_1_1_...

    xstream 让javabean和xml互相转换

    XStream会自动处理Java Bean的属性,生成对应的XML结构。如果需要自定义XML的输出,例如改变元素名或者添加额外的转换规则,可以使用`xstream.alias()`和`xstream.asAttribute()`等方法。 反序列化则是将XML字符串...

    XStream转换

    在这里,`XStream.fromXML()`方法将XML字符串解析成对应的Java对象。 ### XML转换为JSON 虽然XStream本身并不直接支持XML到JSON的转换,但可以通过结合使用另一个库(如Jettison)来实现。首先,你需要添加Jettison...

    XML、JAVA、JSON多种方式互相转换

    下面我们将详细探讨XML、Java与JSON的转换方法。 1. XML到JSON转换: - 使用Java的Jackson库:Jackson库中的`com.fasterxml.jackson.databind.ObjectMapper`类提供了将XML转换为JSON的功能。首先,我们需要解析XML...

    xml和bean之间的相互转换源码

    除了Java自带的API外,还有一些第三方库如Apache的`XStream`,它提供了更简洁的API来实现XML和Bean的转换。XStream通过反射机制自动处理对象到XML的映射,只需简单的几行代码就可以完成转换。 5. **转换步骤**: ...

    xml与javabean的相互转换

    3. 第三方库:除了标准的Java库,还有许多第三方库如Apache's Digester、Castor和XStream等,它们提供了更简洁的API来简化XML与JavaBean之间的转换。 4. XMLBeans库:压缩包中的"xmlbean"可能指的是Apache的...

    XStream使用方法总结附实例代码

    `XStream`是一个强大的Java库,它允许开发者方便地将Java对象转换成XML格式,并能将XML数据还原为对应的Java对象。这个库特别适合于数据交换和对象序列化,其核心类`XStream`承担了Java对象与XML之间的转换工作。...

    SpringMVC 使用JSON、XML视图

    4. Jibx:Jibx是一个XML绑定框架,可以将XML数据与Java对象之间进行动态绑定。 5. Jaxb2:Jaxb2是Java标准的XML绑定工具,能够自动生成Java类以映射XML Schema。 在使用这些库之前,需要确保引入了相应的jar包。...

    springMvc helloworld及springMvc多种视图

    7. xstream-1.4.3.jar:XStream,用于将Java对象序列化为XML,反之亦然。 8. freemarker-2.3.19.jar:FreeMarker,一个模板引擎,可用于生成HTML或其他文本格式的输出。 9. jxl-2.6.12.jar:用于读写Excel文件的库。...

    Jibx开发指南[借鉴].pdf

    这样,XML字符串将被解析成对应的Java对象。 ### Jibx的优势 Jibx的主要优点在于它的性能和灵活性。由于Jibx在编译时生成特定的代码,因此在运行时的序列化和反序列化速度比基于反射的解决方案快得多。此外,Jibx...

    Ext-Js分页示例代码详解.pdf

    这个Action类负责接收请求参数(如`start`和`limit`,分别代表当前页的起始索引和每页显示的记录数),然后根据这些参数生成对应页的数据。在这个例子中,`totalResult`表示数据库中总的记录数,用于计算分页信息。 ...

Global site tag (gtag.js) - Google Analytics