XML和Object的相互转换

  1. 首先我以一个实体类为例子
             1.1新建一个实体类 

     

  2. package com.pengliu.bean;
    import javax.xml.bind.annotation.XmlRootElement;
    @XmlRootElement
    public class User
    {
     private int id;
     private String userName;
     private String passWord;
     public int getId()
     {
      return id;
     }
     public void setId(int id)
     {
      this.id = id;
     }
     public String getUserName()
     {
      return userName;
     }
     public void setUserName(String userName)
     {
      this.userName = userName;
     }
     public String getPassWord()
     {
      return passWord;
     }
     public void setPassWord(String passWord)
     {
      this.passWord = passWord;
     }
     
    }

    从上面的代码可以看出在实体类Class的上面标注了。@XmlRootElement

  3. 类标注表示:@XmlRootElement:用于定义该对象映射成xml根节点元素名,默认与类名一致。可通过@XmlRootElement(name="otherRootElement")方式指定具体名称。

  4. @XmlAccessorType: 用于标识该java对象与xml映射的访问方式。有如下属性值。

  5. PROPERTY: 所有set/get方法对将被映射为xml元素.除非被XmlTransient标注例外.

  6. FIELD:所有对象属性将被映射为xml元素。除非被XmlTransient标注例外.

  7. PUBLIC_MEMBER:每个public的get/set对方法或public field将被映射为xml元素。除非被XmlTransient标注例外.

  8. NONE:没有fields 或 property被映射,除非显示指定具体fields或property。

  9. 属性标注表示:@XmlTransient:指对应属性不做xml映射。

  10. @XmlTransient:指对应属性不做xml映射。

  11. @XmlElement(name="product"):指定属性映射时对应xml元素名称

  12. @XmlElementWrapper(name="products"):在某些场景下,需要对映射的属性做包装处理。如例子中products List对象属性,在xml中我想在映射对所有的product元素再做一个products 元素包装,如下所示,就可以按此种方式实现。<product> … </product>

    2.然后我们再写一个XML的工具类

  13. package com.pengliu.util;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.InputStream;
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.PropertyException;
    import javax.xml.bind.Unmarshaller;
    public class XmlUtil
    {
     /**
      * 此方法是Object对象转换String
      * @param originalObj(需要装换的对象)
      * @param xmlCharset(设置XML的编码,一般为utf-8)
      * @param isFragment(设置生成的时候是否显示【<?xml version="1.0" encoding="utf-8" standalone="yes"?>】,false显示,true不显示)
      * @return
      */
     public static String convertJava2XmlStr(Object originalObj, String xmlCharset, boolean isFragment)
     {
      String xmlStr = "";
      try
      {
       JAXBContext ctx = JAXBContext.newInstance(originalObj.getClass());
       Marshaller marshaller = ctx.createMarshaller();
       marshaller.setProperty(Marshaller.JAXB_ENCODING, xmlCharset);
       marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
       marshaller.setProperty(Marshaller.JAXB_FRAGMENT, isFragment);
       ByteArrayOutputStream os = new ByteArrayOutputStream();
       marshaller.marshal(originalObj, os);
       xmlStr = os.toString();
      }
      catch (PropertyException e)
      {
       e.printStackTrace();
      }
      catch (JAXBException e)
      {
       e.printStackTrace();
      }
      catch (Exception e)
      {
       e.printStackTrace();
      }
      return xmlStr;
     }
     /**
      * 此方法是String装好成Object对象
      * @param obj(传入需要装换后的对象)
      * @param xmlStr(传入XML的内容)
      * @return
      */
     public static Object convertXmlStr2Java(Object obj, String xmlStr)
     {
      try
      {
       JAXBContext ctx = JAXBContext.newInstance(obj.getClass());
       InputStream source = new ByteArrayInputStream(xmlStr.getBytes());
       Unmarshaller unmarshaller = ctx.createUnmarshaller();
       obj = unmarshaller.unmarshal(source);
      }
      catch (JAXBException e)
      {
       e.printStackTrace();
      }
      return obj;
     }
    }

    3.最后写一个测试类,来测试一下效果

  14. package com.pengliu.test;
    import com.pengliu.bean.User;
    import com.pengliu.util.XmlUtil;
    public class TestXML
    {
     public static void main(String[] args)
     {
      User user=new User();
      user.setId(1);
      user.setUserName("a540891049");
      user.setPassWord("asd113399");
      String xml=XmlUtil.convertJava2XmlStr(user, "utf-8", false);
      System.out.println(xml);
      User u=new User();
      u=(User)XmlUtil.convertXmlStr2Java(u, xml);
      System.out.println(u.getUserName());
     }
    }

    最后控制台显示效果是:

  15. <user>
        <id>1</id>
        <passWord>asd113399</passWord>
        <userName>a540891049</userName>
    </user>
    a540891049

转载于:https://my.oschina.net/xlyjx/blog/511197

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值