栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

XML使用总结(一)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

XML使用总结(一)

前言:日常开发过程中,经常会遇到需要将Java对象转XML或者将XML转Java对象,本篇是作者总结日常研发过程中Java与XML相互转换的方法,仅供参考。

目录
        • 一、Java封装的XML API
        • 二、XStream

一、Java封装的XML API

JAXB(Java Architecture for XML Binding简称JAXB):允许Java开发人员将Java类映射为XML表示方式。JAXB提供两种主要特性:将一个Java对象序列化为XML,以及反向操作,将XML解析成Java对象。换句话说,JAXB允许以XML格式存储和读取数据,而不需要程序的类结构实现特定的读取XML和保存XML的代码。——摘自 OSChina《JAXB Java 的 XML 开发包》

  1. 编写XML工具类

    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.Unmarshaller;
    import java.io.StringReader;
    import java.io.StringWriter;
    
    public class XMLUtils {
    
        public static  String beanToXmlStr(T bean, String charset) throws JAXBException {
            JAXBContext jaxbContext = JAXBContext.newInstance(bean.getClass());
            Marshaller marshaller = jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_ENCODING, charset);
            StringWriter writer = new StringWriter();
            marshaller.marshal(bean, writer);
            return writer.toString();
        }
    
        public static  T xmlStrToBean(String xml, Class clazz) throws JAXBException {
            JAXBContext jaxbContextResp = JAXBContext.newInstance(clazz);
            Unmarshaller unmarshaller = jaxbContextResp.createUnmarshaller();
            StringReader reader = new StringReader(xml);
            return (T) unmarshaller.unmarshal(reader);
        }
    
    }
    
  2. 编写Java Bean

    import lombok.Data;
    
    import javax.xml.bind.annotation.XmlAccessType;
    import javax.xml.bind.annotation.XmlAccessorType;
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @Data
    @XmlRootElement(name = "Person")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Person {
        @XmlElement(name = "Name")
        private String name;
        @XmlElement(name = "Age")
        private Integer age;
    }
    
  3. 测试

    import com.test.bean.Person;
    import org.junit.Test;
    
    import javax.xml.bind.JAXBException;
    
    public class TestXml {
        @Test
        public void test() throws JAXBException {
            // bean转xml字符串
            Person person = new Person();
            person.setName("Tom");
            person.setAge(20);
            String xmlStr = XMLUtils.beanToXmlStr(person, "UTF-8");
            System.out.println(xmlStr);
    
            // xml转bean
            Person person2 = XMLUtils.xmlStrToBean(xmlStr, Person.class);
            System.out.println(person2);
        }
    }
    
  4. 运行结果截图

  5. 详细资料请查阅:
    JAXB教程–入门
    JAXB Java 的 XML 开发包

二、XStream

XStream是一个Java对象和XML相互转换的工具,很好很强大。提供了所有的基础类型、数组、集合等类型直接转换的支持。因此XML常用于数据交换、对象序列化。——摘自 OSChina《XStream XML 操作类库》

  1. 导入依赖
    
      com.thoughtworks.xstream
      xstream
      1.4.9
    
    
    
      org.projectlombok
      lombok
      1.18.2
    
    
  2. 编写XStream工具类
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.naming.NoNameCoder;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    public class XStreamUtil {
    
        public static  T xmlStrToBean(String xml, Class clazz) {
            XStream stream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            stream.processAnnotations(clazz);
            stream.autodetectAnnotations(true);
            return (T) stream.fromXML(xml);
        }
    
        public static  String beanToXmlStr(T bean) {
            XStream stream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            stream.autodetectAnnotations(true);
            return stream.toXML(bean);
        }
    
    }
    
  3. 编写Java Bean
    import com.thoughtworks.xstream.annotations.XStreamAlias;
    import lombok.Getter;
    import lombok.Setter;
    import lombok.ToString;
    
    import java.util.Date;
    
    @Getter
    @Setter
    @ToString
    @XStreamAlias("Student")
    public class Student {
        @XStreamAlias("Name")
        private String name;
    
        @XStreamAlias("Sex")
        private String sex;
    
        @XStreamAlias("Age")
        private String age;
    
        //@XStreamAlias("NickName")
        private String NickName;
    
        @XStreamAlias("IsSuccess")
        private Boolean isSuccess;
    
        @XStreamAlias("BirthDay")
        private Date birthDay;
    }
    
  4. 编写测试方法
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.converters.basic.DateConverter;
    import com.thoughtworks.xstream.io.naming.NoNameCoder;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    import java.util.TimeZone;
    
    public class XStreamUtil {
    
        public static  T xmlStrToBean(String xml, Class clazz) {
            XStream stream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            stream.processAnnotations(clazz);
            stream.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", null, TimeZone.getTimeZone("GMT+8")));
            stream.autodetectAnnotations(true);
            return (T) stream.fromXML(xml);
        }
    
        public static  String beanToXmlStr(T bean) {
            XStream stream = new XStream(new DomDriver("UTF-8", new NoNameCoder()));
            stream.registerConverter(new DateConverter("yyyy-MM-dd HH:mm:ss", null, TimeZone.getTimeZone("GMT+8")));
            stream.autodetectAnnotations(true);
            return stream.toXML(bean);
        }
    
    }
    
  5. 运行结果截图
  6. 详细资料请查阅:XStream XML 操作类库
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/356173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号