XStream使用方法

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 cn.itcast.demo1;

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

import org.junit.Test;

import com.thoughtworks.xstream.XStream;

/**
 * 演示XStream
 * @author cxf
 *
 */
public class Demo1 {
	// 返回javabean集合
	public List<Province> getProinvceList() {
		Province p1 = new Province();
		p1.setName("北京");
		p1.addCity(new City("东城区", "DongChengQu"));
		p1.addCity(new City("昌平区", "ChangPingQu"));
		
		Province p2 = new Province();
		p2.setName("辽宁");
		p2.addCity(new City("沈阳", "shenYang"));
		p2.addCity(new City("葫芦岛", "huLuDao"));
		
		List<Province> provinceList = new ArrayList<Province>();
		provinceList.add(p1);
		provinceList.add(p2);
		
		return provinceList;
	}
	
	/**
<list> --> List类型显示list
  <cn.itcast.demo1.Province> --> javabean的类型为Province,它元素的名称为类的完整名
    <name>北京</name> --> javabean的属性名
    <cities> --> javabean的属性名
      <cn.itcast.demo1.City> --> 类名
        <name>东城区</name> --> 属性名
        <description>DongChengQu</description> --> 属性名
      </cn.itcast.demo1.City>
      <cn.itcast.demo1.City>
        <name>昌平区</name>
        <description>ChangPingQu</description>
      </cn.itcast.demo1.City>
    </cities>
  </cn.itcast.demo1.Province>
  <cn.itcast.demo1.Province>
    <name>辽宁</name>
    <cities>
      <cn.itcast.demo1.City>
        <name>沈阳</name>
        <description>shenYang</description>
      </cn.itcast.demo1.City>
      <cn.itcast.demo1.City>
        <name>葫芦岛</name>
        <description>huLuDao</description>
      </cn.itcast.demo1.City>
    </cities>
  </cn.itcast.demo1.Province>
</list>
	 */
	@Test
	public void fun1() {
		List<Province> proList = getProinvceList();
		/*
		 * 创建XStream对象
		 * 调用toXML把集合转换成xml字符串
		 */
		XStream xstream = new XStream();
		String s = xstream.toXML(proList);
		System.out.println(s);
	}
	
	/*
	 * 别名(alias)
	 * 希望:
	 * * 默认List类型对应<list>元素,希望让List类型对应<china>元素
	 * * 默认Province类型对应<cn.itcast.demo1.Province>,希望让它对应<province>
	 * * 默认City类型对应<cn.itcast.demo1.City>,希望它对应<city>元素
	 */
	/*
<china>
  <province>
    <name>北京</name>
    <cities>
      <city>
        <name>东城区</name>
        <description>DongChengQu</description>
      </city>
      <city>
        <name>昌平区</name>
        <description>ChangPingQu</description>
      </city>
    </cities>
  </province>
  <province>
    <name>辽宁</name>
    <cities>
      <city>
        <name>沈阳</name>
        <description>shenYang</description>
      </city>
      <city>
        <name>葫芦岛</name>
        <description>huLuDao</description>
      </city>
    </cities>
  </province>
</china>
	 */
	@Test
	public void fun2() {
		List<Province> proList = getProinvceList();
		XStream xstream = new XStream();
		/*
		 * 给指定的类型指定别名
		 */
		xstream.alias("china", List.class);//给List类型指定别名为china
		xstream.alias("province", Province.class);//给Province指定别名为province
		xstream.alias("city", City.class);//给City类型指定别名为city
		
		
		String s = xstream.toXML(proList);
		System.out.println(s);
	}
	
	/*
	 * 默认javabean的属性都会生成子元素,而现在希望生成元素的属性
	 */
/*
<china>
  <province name="北京">
    <cities>
      <city>
        <name>东城区</name>
        <description>DongChengQu</description>
      </city>
      <city>
        <name>昌平区</name>
        <description>ChangPingQu</description>
      </city>
    </cities>
  </province>
  <province name="辽宁">
    <cities>
      <city>
        <name>沈阳</name>
        <description>shenYang</description>
      </city>
      <city>
        <name>葫芦岛</name>
        <description>huLuDao</description>
      </city>
    </cities>
  </province>
 */
	@Test
	public void fun3() {
		List<Province> proList = getProinvceList();
		XStream xstream = new XStream();
		xstream.alias("china", List.class);//给List类型指定别名为china
		xstream.alias("province", Province.class);//给Province指定别名为province
		xstream.alias("city", City.class);//给City类型指定别名为city
		
		
		/*
		 * 把Province类型的name属性,生成<province>元素的属性
		 */
		xstream.useAttributeFor(Province.class, "name");
		
		
		String s = xstream.toXML(proList);
		System.out.println(s);		
	}

	
	/*
	 * 去除List类型的属性,只把list中的元素生成xml元素
	 */
/*
<china>
  <province name="北京">
    <city>
      <name>东城区</name>
      <description>DongChengQu</description>
    </city>
    <city>
      <name>昌平区</name>
      <description>ChangPingQu</description>
    </city>
  </province>
  <province name="辽宁">
    <city>
      <name>沈阳</name>
      <description>shenYang</description>
    </city>
    <city>
      <name>葫芦岛</name>
      <description>huLuDao</description>
    </city>
  </province>
</china>
 */
	@Test
	public void fun4() {
		List<Province> proList = getProinvceList();
		XStream xstream = new XStream();
		xstream.alias("china", List.class);//给List类型指定别名为china
		xstream.alias("province", Province.class);//给Province指定别名为province
		xstream.alias("city", City.class);//给City类型指定别名为city
		xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
		
		
		/*
		 * 去除<cities>这样的Collection类型的属性
		 * 去除Provice类的名为cities的List类型的属性!
		 */
		xstream.addImplicitCollection(Province.class, "cities");
		
		
		String s = xstream.toXML(proList);
		System.out.println(s);		
	}
	
	/**
	 * 去除不想要的javabean属性
	 * 就是让某引起javabean属性,不生成对应的xml元素!
	 */
/*
<china>
  <province name="北京">
    <city>
      <name>东城区</name>
    </city>
    <city>
      <name>昌平区</name>
    </city>
  </province>
  <province name="辽宁">
    <city>
      <name>沈阳</name>
    </city>
    <city>
      <name>葫芦岛</name>
    </city>
  </province>
</china>
 */
	@Test
	public void fun5() {
		List<Province> proList = getProinvceList();
		XStream xstream = new XStream();
		xstream.alias("china", List.class);//给List类型指定别名为china
		xstream.alias("province", Province.class);//给Province指定别名为province
		xstream.alias("city", City.class);//给City类型指定别名为city
		xstream.useAttributeFor(Province.class, "name");//把Province类型的name属性,生成<province>元素的属性
		xstream.addImplicitCollection(Province.class, "cities");//去除Provice类的名为cities的List类型的属性!
		
		
		/*
		 * 让City类的,名为description属性不生成对应的xml元素
		 */
		xstream.omitField(City.class, "description");
		
		
		String s = xstream.toXML(proList);
		System.out.println(s);		
	}
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用XStream库实现XML与对象之间的互转可以通过以下步骤完成: 1. 引入XStream库的依赖:在你的项目中引入XStream库的依赖,可以参考我之前提供的Maven和Gradle配置。 2. 定义Java类:创建一个Java类来表示你的对象,并使用XStream提供的注解来指定XML元素和属性与Java类的映射关系。例如: ```java import com.thoughtworks.xstream.annotations.XStreamAlias; @XStreamAlias("person") public class Person { private String name; private int age; // 省略构造函数、getter和setter方法 // ... } ``` 3. 将对象转换为XML:使用XStream将Java对象转换为XML字符串。示例如下: ```java import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args) { // 创建XStream实例 XStream xStream = new XStream(); // 设置类别名,用于与XML元素进行映射 xStream.alias("person", Person.class); // 创建一个Person对象 Person person = new Person(); person.setName("John"); person.setAge(30); // 将Person对象转换为XML字符串 String xml = xStream.toXML(person); // 输出XML字符串 System.out.println(xml); } } ``` 以上代码将输出以下XML字符串: ```xml <person> <name>John</name> <age>30</age> </person> ``` 4. 将XML转换为对象:使用XStream将XML字符串转换回Java对象。示例如下: ```java import com.thoughtworks.xstream.XStream; public class Main { public static void main(String[] args) { // 创建XStream实例 XStream xStream = new XStream(); // 设置类别名,用于与XML元素进行映射 xStream.alias("person", Person.class); // XML字符串 String xml = "<person><name>John</name><age>30</age></person>"; // 将XML转换为Person对象 Person person = (Person) xStream.fromXML(xml); // 输出Person对象的属性 System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } ``` 以上代码将输出: ``` Name: John Age: 30 ``` 通过以上步骤,你可以使用XStream实现XML与对象之间的互转。你可以根据具体的需求对Java类和XML结构进行调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值