`
ceci.lia
  • 浏览: 144447 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用XStream来映射xml中列表元素到java对象

    博客分类:
  • Java
阅读更多
网上很多讲述使用XStream来映射xml文件到java对象的文章,但是几乎没有一篇文章讲述,如何使用XStream来映射xml中的同级的列表元素到java对象的文章。本文示例中将使用XStream 1.3.1。请去XStream的官方站点上下载相应的包。

在Eclipse中新建一个Java Project,然后引入XStream的包:xstream-1.3.1.jar和xpp3-min-1.1.4c.jar。在这里使用xpp的xml解析技术来解析xml,而不是传统的DOM或者sax来进行xml的解析。

在src下新建sample.xml文件。代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<person id="1" name="sample">
	<wife name="wife_name" age="25"></wife>
	<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
</person>


新建House类来映射house元素,House类的源代码如下:


public class House {
	private String name = "";
	private String address = "";
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	
}


新建Wife类来映射wife标签,源代码如下:


public class Wife {
	private String name = "";
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	
}


新建Person类来映射person元素,源代码如下:
import java.util.List;


public class Person {
	private int id;
	private String name;
	private Wife wife;
	private List<House> houseList;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Wife getWife() {
		return wife;
	}
	public void setWife(Wife wife) {
		this.wife = wife;
	}
	public List<House> getHouseList() {
		return houseList;
	}
	public void setHouseList(List<House> houseList) {
		this.houseList = houseList;
	}
}


新建TestMain方法,包含main方法。首先,构建XStream的实例:

	XStream xstream = new XStream();


然后,就是配置xml文件和java对象之间的映射,源代码如下:
		xstream.alias("person", Person.class);
		xstream.aliasAttribute(Person.class, "id", "id");
		xstream.aliasAttribute(Person.class, "name", "name");
		
		xstream.alias("wife", Wife.class);
		xstream.aliasAttribute(Wife.class, "name", "name");
		
		xstream.addImplicitCollection(Person.class, "houseList");
		xstream.alias("house", House.class);
		xstream.aliasAttribute(House.class,"name", "name");
		xstream.aliasAttribute(House.class, "address", "address");

注意代码中的这句“xstream.addImplicitCollection(Person.class, "houseList");”,如果不加,xml配置文件的house元素将作为houselist的子元素。将变成
<houseList>
<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
	<house name="house1" address="address1"></house> 
</houseList>

最后,使用XStream.fromXML来将对应的xml转化成java对象。代码如下:
Person person = (Person)xstream.fromXML(TestMain.class.getClassLoader()
.getResourceAsStream("sample.xml"));

由于sample.xml文件位于classpath下,所以使用了ClassLoader来加载sample.xml。

测试代码如下:
        System.out.println("[person.name=" + person.getName() + "]");
	System.out.println("[wife.name=" + person.getWife().getName() + ", wife.age=" + person.getWife().getAge() + "]");
	System.out.println("[person.houseList.size=" + person.getHouseList().size() + "]");
	System.out.println("[person.houseList.house1.name=" +                person.getHouseList().get(0).getName() + ",address=" + person.getHouseList().get(0).getAddress() +"]");


测试结果如下:
[person.name=sample]
[wife.name=wife_name, wife.age=0]
[person.houseList.size=4]
person.houseList.house1.name=house1,address=address1]

0
1
分享到:
评论
1 楼 yonge812 2013-08-28  
如果xml既包含命名空间(节点包含前缀)又包含与java属性的映射,如何转换成对象?

相关推荐

    Java用xStream拼接xml

    Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...

    使用xstream进行java类与xml文件互转解析--代码

    XStream的工作原理是基于反射,它可以自动映射Java对象的字段到XML元素。为了将一个Java对象转换成XML,首先需要创建该对象实例,然后使用XStream的`toXML()`方法: ```java import ...

    使用XStream是实现XML与Java对象的转换(4)--转换器

    XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而,在某些情况下,我们可能需要自定义转换规则,比如处理特殊类型的字段或者优化默认的序列化行为。这就是XStream转换器的作用。 ...

    使用XStream 多集合生成xml

    在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对这一主题的详细说明。 首先,我们需要了解XStream的基本用法。XStream的核心是`XStream`类,...

    XStream解析XML实例

    XStream是一个开源库,由Joe Walnes创建,它提供了Java对象到XML和XML到Java对象的直接映射。它的主要优点是其简洁的API和易于理解的输出。XStream的核心理念是,如果你能打印一个对象,那么也应该能将其转换为XML,...

    XStream解析xml 转换成对象案例

    XStream通过映射XML节点到Java类的字段来实现对象的序列化和反序列化。这意味着你需要定义一个Java类,该类的字段对应于XML文档中的元素。XStream会自动处理这个映射过程,无需编写复杂的DOM或SAX解析代码。 下面是...

    XStream解析xml demo

    而XStream是一个Java库,它提供了简单且直观的方式来序列化和反序列化Java对象到XML,以及从XML回溯到Java对象。本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解...

    使用XStream序列化/反序列化对象

    由于XStream使用Java类型信息来构建XML,因此在反序列化时,它可以确保对象的类型正确无误。此外,XStream还提供了自定义转换器的功能,以便处理自定义的序列化逻辑。 总结起来,XStream是一个强大的工具,用于在...

    android XMl 解析神奇xstream 二: 把对象转换成xml

    2. **对象与XML的映射**:在XStream中,每个Java类可以映射到一个XML元素,类的字段则映射到XML的属性或子元素。例如,有一个`Person`类: ```java public class Person { private String name; private int age...

    转换XML内容为Java对象

    XStream会自动映射XML元素到Java对象的属性,这要求XML结构与Java对象的字段对应。 为了自定义XML的格式,我们可以配置XStream实例,比如改变元素名称、忽略某些字段或处理复杂的数据类型。例如,如果我们希望改变...

    《xStream完美转换XML、JSON》学习笔记

    首先,xStream的核心概念是通过类型转换器(Converter)来实现Java对象到XML/JSON的映射。它提供了一种直观的方式来定义对象如何被序列化,只需简单的注解或者配置即可。例如,通过`@XStreamAlias`注解,我们可以...

    xml操作之xstream

    它会自动将集合转换为XML的数组或列表元素,将嵌套对象转换为子元素。 8. **XML流处理**: 如果需要处理大型XML文件,XStream还支持非DOM的流式处理,以降低内存消耗。 9. **依赖性**: XStream的使用需要添加...

    基于java的转换xml.zip

    1. **简单易用**:XStream提供了一种直观的方式来映射XML到Java对象,反之亦然。只需几行代码,就可以实现对象到XML的转换。 2. **无需XML Schema**:XStream不需要XML Schema定义,可以直接从Java类定义生成XML。 3...

    xstream-1.3.1

    - **映射(Mapping):** XStream允许自定义对象到XML的映射,例如更改元素名或处理特殊的类型。 2. **安全考虑:** XStream的默认配置可能会引发安全问题,因为它可以序列化任何对象。为了安全,应禁用不必要的...

    Java绑定XML架构的技术内涵

    当需要展示图书列表时,则通过反序列化从XML文档中恢复Java对象。 #### 六、总结 Java绑定XML架构是连接Java应用程序与XML文档的重要桥梁,它极大地简化了开发者处理XML文档的工作流程,提高了开发效率。通过本文...

    xstream-1.4.2.jar

    2. **自动映射**:XStream能够自动将Java类的字段映射到XML元素,无需额外的注解或配置。 3. **安全性**:XStream提供了安全模式,防止恶意的XML输入导致的安全漏洞,如XML注入攻击。 4. **自定义转换**:对于复杂...

    xstream-1.3.1.zip

    XStream还支持处理集合和数组,可以将它们转换为XML列表,也可以从XML列表中恢复。此外,对于嵌套的对象和复杂的继承结构,XStream也能处理得游刃有余。 总结起来,XStream作为一个强大的Java库,极大地简化了...

    xstream-1.4.8最齐全的jar包

    XStream通过一种称为“自动映射”的机制,可以自动将Java类的字段映射到XML元素,反之亦然。只需简单的几行代码,开发者就可以实现对象到XML的序列化和反序列化。 以下是一些关于XStream的关键知识点: 1. **自动...

    XStream 1.3 API 手册

    XStream 是一个用 Java 编写的库,它提供了一种简单且高效的方式来序列化和反序列化对象到XML,反之亦然。这个API手册是针对XStream 1.3版本的,包含了详细的使用指南和技术信息,旨在帮助开发者更深入地理解和应用...

    xstream1.4.8源码和jar

    XStream是一个开源库,主要用Java编写,它提供了一个简单且直观的方式来序列化和反序列化Java对象到XML,反之亦然。这个工具在处理XML数据时非常方便,尤其适用于那些需要将Java对象转换为XML格式进行存储或传输的...

Global site tag (gtag.js) - Google Analytics