Java xml与实体Bean的转换

阅读更多
1、pom.xml依赖包:
  
      com.thoughtworks.xstream
      xstream
      1.4.7
    

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中显示为:
    @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集合最外面的这样的标记
    @XStreamImplicit
    private List list = new ArrayList();
    public void addUser(User user){
        this.list.add(user);
    }
  /** setter和getter省略  */
}

3、xml转bean
  public static void xmlToBean(){
         String xmlStr ="\n" +
                 "  \n" +
                 "    jiandequn\n" +
                 "    29\n" +
                 "    
深圳市西丽白芒村
\n" + " 1546464\n" + " male\n" + "
\n" + "
"; 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输出结果:

  
    jiandequn
    29
    
深圳市西丽白芒村
1546464 male



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

你可能感兴趣的:(xml,java,bean)