Ajax——XStream

本文详细介绍了如何使用XStream将JavaBean转换为XML,并深入探讨了别名设置、属性使用、Collection处理及非必要属性排除等高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XStream


1. 什么作用
  * 可以把JavaBean转换为(序列化为)xml


2. XStream的jar包
  * 核心JAR包:xstream-1.4.7.jar;
  * 必须依赖包:xpp3_min-1.1.4c(XML Pull Parser,一款速度很快的XML解析器);


3. 使用步骤
  * XStream xstream = new XStream();
  * String xmlStr = xstream.toXML(javabean);


4. 使用细节
  * 别名:把类型对应的元素名修改了
    > xstream.alias("china", List.class):让List类型生成的元素名为china
    > xstream.alias("province", Province.class):让Province类型生成的元素名为province
  * 使用为属性:默认类的成员,生成的是元素的子元素!我们希望让类的成员生成元素的属性
    > xstream.useAttributeFor(Province.class, "name"):把Province类的名为name成员,生成<province>元素的name属性
  * 去除Collection类型的成名:我们只需要Collection的内容,而不希望Collection本身也生成一个元素
    > xstream.addImplicitCollection(Province.class, "cities"):让Province类的名为cities(它是List类型的,它的内容还会生成元素)的成名不生成元素
  * 去除类的指定成名,让其不生成xml元素

    > xstream.omitField(City.class, "description"):在生成的xml中不会出现City类的名为description的对应的元素!

package demo1;

public class City {
	private String name;
	private String description;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public City(String name, String description) {
		super();
		this.name = name;
		this.description = description;
	}
	public City() {
		super();
		// TODO Auto-generated constructor stub
	}
	
}

package demo1;

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

public class Province {
	private String name;
	private List<City> cities=new ArrayList<City>();
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public List<City> getCities() {
		return cities;
	}
	public void setCities(List<City> cities) {
		this.cities = cities;
	}
	
	public void addCity(City city){
		this.cities.add(city);
	}
	public Province(String name) {
		super();
		this.name = name;
	}
	
}
package demo1;

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

import org.junit.Test;

import com.thoughtworks.xstream.XStream;

public class Demo {
	
	public List<Province> getProinvceList(){
		Province p1=new Province("北京");
		p1.addCity(new City("朝阳区","chaoyang"));
		p1.addCity(new City("西城区","xiCheng"));
		
		Province p2=new Province("内蒙古");
		p2.addCity(new City("呼和浩特","huhehaote"));
		p2.addCity(new City("包头","baotou"));
		
		List<Province> list=new ArrayList<Province>();
		list.add(p1);
		list.add(p2);
		
		return list;
	}
	
	@Test
	public void fun1(){
		List<Province> provinces=getProinvceList();
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */
		XStream xstream=new XStream();
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * 别名(alias)
	 * 希望:
	 * * 默认List类型对应<list>元素,希望让List类型对应<china>元素
	 * * 默认Province类型对应<demo1.Province>,希望让它对应<province>
	 * * 默认City类型对应<demo1.City>,希望它对应<city>元素
	 */
	
	@Test
	public void fun2(){
		List<Province> provinces=getProinvceList();
		
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */		
		XStream xstream=new XStream();
		xstream.alias("china", List.class);
		xstream.alias("province",Province.class);
		xstream.alias("city", City.class);
		
		System.out.println(xstream.toXML(provinces));
	}
	
	@Test
	public void fun3(){
		List<Province> provinces=getProinvceList();
		
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */		
		XStream xstream=new XStream();
		xstream.alias("china", List.class);
		xstream.alias("province",Province.class);
		xstream.alias("city", City.class);
		/*
		 * 把Province类型的name属性,生成<province>元素的属性
		 */
		xstream.useAttributeFor(Province.class, "name");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * 去掉List类型的属性
	 */
	@Test
	public void fun4(){
		List<Province> provinces=getProinvceList();
			
		XStream xstream=new XStream();
		xstream.alias("china", List.class);
		xstream.alias("province",Province.class);
		xstream.alias("city", City.class);
		xstream.useAttributeFor(Province.class, "name");
		/*
		 * 去掉<cities>这样的Collection属性
		 */
		xstream.addImplicitCollection(Province.class, "cities");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	/*
	 * /**
	 * 去除不想要的javabean属性,不生成对应的xml元素!
	 */
	@Test
	public void fun5(){
		List<Province> provinces=getProinvceList();
			
		XStream xstream=new XStream();
		xstream.alias("china", List.class);
		xstream.alias("province",Province.class);
		xstream.alias("city", City.class);
		xstream.useAttributeFor(Province.class, "name");
		xstream.addImplicitCollection(Province.class, "cities");
		
		/*
		 * 让City类的,名为description属性不生成对应的xml元素
		 */
		xstream.omitField(City.class, "description");
		
		System.out.println(xstream.toXML(provinces));
	}
	
	
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值