`
德安德鲁
  • 浏览: 44016 次
  • 性别: 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-1.4.15.jar

    XStream 反序列化漏洞(CVE-2020-26258 & 26259),修复jar包 xstream-1.4.15.jar Xstream 是 Java 类库,用来将对象序列化成 XML (JSON) 或反序列化为对象。XStream 是一款开源软件,允许在 BSD 许可证的许可下分发...

    xstream-1.4.3-sources.jar

    XStream 用法详解 XML 转换为 java 实体类 所需要的 xstream-1.4.3-sources.jar jar包 具体实现请参考 http://blog.csdn.net/morning99/article/details/28875159

    powermock-classloading-xstream-1.4.7

    powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-classloading-xstream-1.4.7powermock-class...

    xstream-1.4.9实现xml与对象互转

    xstream-1.4.9实现xml与对象互转,不会用可以找dddddddddddddddddd

    xstream-1.4.3.jar 包 对象转xml

    xstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包 对象转xmlxstream-1.4.3.jar 包...

    xstream-1.4.20.jar

    xstream-1.4.20.jar

    xstream-1.4.19.jar

    xstream-1.4.19.jar

    xstream-1.4.7.jar及源码;xml-pull-1.3.1.jar

    xml-pull-1.3.1.jar工具类,xstream-1.3.jar,XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。 因此XML常用于数据交换、对象序列化(这种序列化和...

    xstream-1.3.1.jar javabean与xml之间的转化

    xstream-1.3.1.jar javabean与xml之间的转化,实现转化

    xstream-1.4.4-sources.jar

    XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换。将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件。

    xstream-1.3.1-sae-liufeng

    修改XStream源码,解决SAE不支持XStream的问题。

    xstream-1.4.1.jar

    xstream-1.4.1.jar XML解析

    xstream最新版 - xstream-1.4.18.jar

    xstream最新版jar包

    xstream-1.4.2.jar

    xstream-1.4.2.jar,官网上也有,由于本人分没了,希望有分的同志给点分。如果你也每份,请上官网下,地址:http://xstream.codehaus.org/download.html

    xstream-1.4.11-API文档-中文版.zip

    赠送jar包:xstream-1.4.11.jar; 赠送原API文档:xstream-1.4.11-javadoc.jar; 赠送源代码:xstream-1.4.11-sources.jar; 赠送Maven依赖信息文件:xstream-1.4.11.pom; 包含翻译后的API文档:xstream-1.4.11-...

    xstream-1.4.jar

    xstream jar包,java对象转xml以及xml转java对象,操作很简单。

    xstream-1.4.7-API文档-中文版.zip

    赠送jar包:xstream-1.4.7.jar; 赠送原API文档:xstream-1.4.7-javadoc.jar; 赠送源代码:xstream-1.4.7-sources.jar; 赠送Maven依赖信息文件:xstream-1.4.7.pom; 包含翻译后的API文档:xstream-1.4.7-javadoc-...

    xstream轻松解析xml到java对象

    xstream轻松解析xml到java对象,内附样例。so easy!妈妈再也不用担心我的xml解析。

    xml解析及使用XStream实现javaBean与xml之间的转换

    一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换

    xstream-1.3.1.jar

    将java对象转换成,xml, xstream-1.3.1.jar xstream-1.3.1.jar

Global site tag (gtag.js) - Google Analytics