`

Java xml与实体Bean的转换

    博客分类:
  • java
阅读更多
1、pom.xml依赖包:
  <dependency>
      <groupId>com.thoughtworks.xstream</groupId>
      <artifactId>xstream</artifactId>
      <version>1.4.7</version>
    </dependency>

2、java代码实现转换
bean实体类:
User.java
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
 // 别名注解,这个别名就是XML文档中的元素名,Java的属性名不一定要与别名一致
@XStreamAlias("user")
public class User {
    @XStreamAlias("name")
    private String name;
    @XStreamAlias("age")
    private String age;
    @XStreamAlias("id")
// 属性注解,此price就是book的属性,在XML中显示为:<user id="1">
    @XStreamAsAttribute 
    private Integer id;
    @XStreamAlias("address")
    private String address;
    @XStreamAlias("card")
    private String card;
    @XStreamAlias("gender")
    private String gender;
   /** setter和getter省略  */
}

UserList.java
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

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

@XStreamAlias("users")
public class UserList {
    @XStreamAlias("value")
    @XStreamAsAttribute
    private String value;
 // 隐式集合,加上这个注解可以去掉book集合最外面的<list></list>这样的标记
    @XStreamImplicit
    private List<User> list = new ArrayList<User>();
    public void addUser(User user){
        this.list.add(user);
    }
  /** setter和getter省略  */
}

3、xml转bean
  public static void xmlToBean(){
         String xmlStr ="<users value=\"0\">\n" +
                 "  <user id=\"1\">\n" +
                 "    <name>jiandequn</name>\n" +
                 "    <age>29</age>\n" +
                 "    <address>深圳市西丽白芒村</address>\n" +
                 "    <card>1546464</card>\n" +
                 "    <gender>male</gender>\n" +
                 "  </user>\n" +
                 "</users>";
         XStream xStream = new XStream(new DomDriver("utf-8"));
        xStream.processAnnotations(UserList.class);; // 识别obj类中的注解
        UserList userList = (UserList) xStream.fromXML(xmlStr);
        System.out.println(userList.getValue());
    }

4、bean转xml
   public static void beanToXml(){
        User user = new User();
        user.setAddress("深圳市西丽白芒村");
        user.setAge("29");
        user.setCard("1546464");
        user.setId(1);
        user.setGender("male");
        user.setName("jiandequn");
        UserList userList = new UserList();
        userList.setValue("0");
        userList.addUser(user);
        XStream xStream = new XStream(new DomDriver("utf-8"));
        xStream.processAnnotations(userList.getClass());; // 识别obj类中的注解
// 以压缩的方式输出XML
//        StringWriter sw = new StringWriter();
//        xStream.marshal(userList, new CompactWriter(sw));
     // 以格式化的方式输出XML
        System.out.println( xStream.toXML(userList));
    }

bean转xml输出结果:
<users value="0">
  <user id="1">
    <name>jiandequn</name>
    <age>29</age>
    <address>深圳市西丽白芒村</address>
    <card>1546464</card>
    <gender>male</gender>
  </user>
</users>



    除了上面示例中用的注解,xstream还有下面几种注解也经常用到。
    @XstreamOmitField 忽略字段
    这相当于设置某些字段为临时属性,在转换中不再起作用。
    @XStreamConverter(XXX.class)  转换器
    XXX.class是一个实现了com.thoughtworks.xstream.converters.Converter接口的转换器,对某些类型的值进行转换,比如布尔值类型的true或false,如果不加转换器,默认生成的值就是true或false。xstream自带了BooleanConverter转换器,可以将默认值转换成需要的文本值,如果xstream没有需要的转换器就得自己实现Converter接口来自定义转换器。
    根据大象的经验,为了少给自己找麻烦,比如避免使用转换器,最好将与XML元素或属性对应的Java对象属性都设置成String类型,当然列表还是要定义成List类型的。只要不是特别奇葩,一般情况下,示例部分就能满足绝大部分的需求。
分享到:
评论

相关推荐

    xstream实现xml和java bean 互相转换

    它可以将Java对象转换为XML文档,也可以将XML文档转换为Java对象。 pom引用 &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt; &lt;artifactId&gt;xstream &lt;version&gt;1.4.20 实体类和测试类详见博客 ...

    xml文件和java实体类(bean)相互转化 源码献上,导入(My)eclipse,可直接运行看效果。

    利用面向对象的思想; 1.实现读取xml文件,映射为相应实体类。 2.将实体类内容转化为xml文件。对于我们开发来说,有了实体类,增删改查,不是轻而易举!不多说,上图(这里没法上),上代码。

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    xml转javaBean,javaBean转xml,xml标签大小写问题,CDATA的生成,以及对xml特殊符号的处理

    java 专用 Bean工具

    链接数据库后生成对应的实体、vo,service,xml,基础sql文件

    JAVA_API1.6文档(中文)

    java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...

    java源码包---java 源码 大量 实例

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address EJB...

    Java 1.6 API 中文 New

    java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...

    java api最新7.0

    java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java ...

    JavaAPI1.6中文chm文档 part1

    java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...

    jaxme-0.3.jar.zip

    l JaxMe是JAXB(Java/XML绑定规范)的开源实现 l Java/XML绑定编译器的输入是...Ø 实现相同功能的实体bean或会话bean l 总之,通过简单的创建模式,运行JaxMe绑定编译器,就能自动生成典型Web应用整个工作流程的类

    java源码包4

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    java源码包3

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    JAVA上百实例源码以及开源项目源代码

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    java源码包2

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    JavaAPI中文chm文档 part2

    java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 ...

    JAVA上百实例源码以及开源项目

    从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始化一个EJB实例 5个目标文件,演示Address ...

    Java数据库编程宝典3

    目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 ... 17.3 使用Java XML API——Xerces和JDOM ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除,从账户中取出amt,如果amt&gt;账户余额抛出异常,一个实体Bean可以表示不同的数据实例,我们应该通过主键来判断删除哪个数据实例…… ejbCreate函数用于初始...

Global site tag (gtag.js) - Google Analytics