网上很多讲述使用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]
分享到:
相关推荐
Java中的xStream库提供了一个简单易用的方式来将Java对象序列化为XML,反之亦然,即反序列化XML回Java对象。 **xStream简介** xStream是一个开源的Java库,由Johannes Link创建。它提供了简洁、直观的API来处理XML...
XStream的工作原理是基于反射,它可以自动映射Java对象的字段到XML元素。为了将一个Java对象转换成XML,首先需要创建该对象实例,然后使用XStream的`toXML()`方法: ```java import ...
XStream的核心原理是通过反射机制自动将Java对象映射到XML结构,并反之亦然。然而,在某些情况下,我们可能需要自定义转换规则,比如处理特殊类型的字段或者优化默认的序列化行为。这就是XStream转换器的作用。 ...
在这个场景中,"使用XStream多集合生成xml"是一个关键的技术点,它涉及到如何将多个集合类的对象转换成XML文档。以下是对这一主题的详细说明。 首先,我们需要了解XStream的基本用法。XStream的核心是`XStream`类,...
XStream是一个开源库,由Joe Walnes创建,它提供了Java对象到XML和XML到Java对象的直接映射。它的主要优点是其简洁的API和易于理解的输出。XStream的核心理念是,如果你能打印一个对象,那么也应该能将其转换为XML,...
XStream通过映射XML节点到Java类的字段来实现对象的序列化和反序列化。这意味着你需要定义一个Java类,该类的字段对应于XML文档中的元素。XStream会自动处理这个映射过程,无需编写复杂的DOM或SAX解析代码。 下面是...
而XStream是一个Java库,它提供了简单且直观的方式来序列化和反序列化Java对象到XML,以及从XML回溯到Java对象。本篇文章将深入探讨XStream解析XML的示例,帮助你理解和掌握这一强大的工具。 首先,我们需要理解...
由于XStream使用Java类型信息来构建XML,因此在反序列化时,它可以确保对象的类型正确无误。此外,XStream还提供了自定义转换器的功能,以便处理自定义的序列化逻辑。 总结起来,XStream是一个强大的工具,用于在...
2. **对象与XML的映射**:在XStream中,每个Java类可以映射到一个XML元素,类的字段则映射到XML的属性或子元素。例如,有一个`Person`类: ```java public class Person { private String name; private int age...
XStream会自动映射XML元素到Java对象的属性,这要求XML结构与Java对象的字段对应。 为了自定义XML的格式,我们可以配置XStream实例,比如改变元素名称、忽略某些字段或处理复杂的数据类型。例如,如果我们希望改变...
首先,xStream的核心概念是通过类型转换器(Converter)来实现Java对象到XML/JSON的映射。它提供了一种直观的方式来定义对象如何被序列化,只需简单的注解或者配置即可。例如,通过`@XStreamAlias`注解,我们可以...
它会自动将集合转换为XML的数组或列表元素,将嵌套对象转换为子元素。 8. **XML流处理**: 如果需要处理大型XML文件,XStream还支持非DOM的流式处理,以降低内存消耗。 9. **依赖性**: XStream的使用需要添加...
1. **简单易用**:XStream提供了一种直观的方式来映射XML到Java对象,反之亦然。只需几行代码,就可以实现对象到XML的转换。 2. **无需XML Schema**:XStream不需要XML Schema定义,可以直接从Java类定义生成XML。 3...
- **映射(Mapping):** XStream允许自定义对象到XML的映射,例如更改元素名或处理特殊的类型。 2. **安全考虑:** XStream的默认配置可能会引发安全问题,因为它可以序列化任何对象。为了安全,应禁用不必要的...
当需要展示图书列表时,则通过反序列化从XML文档中恢复Java对象。 #### 六、总结 Java绑定XML架构是连接Java应用程序与XML文档的重要桥梁,它极大地简化了开发者处理XML文档的工作流程,提高了开发效率。通过本文...
2. **自动映射**:XStream能够自动将Java类的字段映射到XML元素,无需额外的注解或配置。 3. **安全性**:XStream提供了安全模式,防止恶意的XML输入导致的安全漏洞,如XML注入攻击。 4. **自定义转换**:对于复杂...
XStream还支持处理集合和数组,可以将它们转换为XML列表,也可以从XML列表中恢复。此外,对于嵌套的对象和复杂的继承结构,XStream也能处理得游刃有余。 总结起来,XStream作为一个强大的Java库,极大地简化了...
XStream通过一种称为“自动映射”的机制,可以自动将Java类的字段映射到XML元素,反之亦然。只需简单的几行代码,开发者就可以实现对象到XML的序列化和反序列化。 以下是一些关于XStream的关键知识点: 1. **自动...
XStream 是一个用 Java 编写的库,它提供了一种简单且高效的方式来序列化和反序列化对象到XML,反之亦然。这个API手册是针对XStream 1.3版本的,包含了详细的使用指南和技术信息,旨在帮助开发者更深入地理解和应用...
XStream是一个开源库,主要用Java编写,它提供了一个简单且直观的方式来序列化和反序列化Java对象到XML,反之亦然。这个工具在处理XML数据时非常方便,尤其适用于那些需要将Java对象转换为XML格式进行存储或传输的...