使用JAXB实现JAVA对象和XML字符串的互相转换

本文通过一个具体的例子,展示了如何使用JAXB在Java对象与XML字符串之间进行转换。包括创建Java实体类、测试类及工具类的代码,并给出了转换后的XML字符串和Java对象的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于JAXB的介绍,见:http://blog.youkuaiyun.com/qq_32786873/article/details/71715254

测试类:

    package com.solin.test;
     
    import java.util.ArrayList;
    import java.util.List;
     
    public class Test {
        public static void main(String[] args) {
            Student student = new Student();
            student.setName("邪恶小法师");
            student.setAge("110");
            student.setSex("男");
            List<Student.Friend> list = new ArrayList<>();
            Student.Friend f1 = new Student.Friend();
            f1.setName("德玛西亚之力");
            f1.setAge("888");
            f1.setSex("男");
            
            Student.Friend f2 = new Student.Friend();
            f2.setName("无双剑姬");
            f2.setAge("898");
            f2.setSex("女");
            
            list.add(f1);
            list.add(f2);
            student.setFriend(list);
            
            //将java对象转换为XML字符串
            String xmlStr = XmlAndJavaObjectConvert.convertToXml(student);
            System.out.println(xmlStr);
            
            //将xml字符串转换为java对象
            System.out.println(XmlAndJavaObjectConvert.convertXmlStrToObject(Student.class, xmlStr));
        }
    }


实体类:

    package com.solin.test;
     
    import java.util.List;
     
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    import javax.xml.bind.annotation.XmlType;
     
    //XML文件中的根标识  
    @XmlRootElement(name = "Student")
    //控制JAXB 绑定类中属性和字段的排序  
    @XmlType(propOrder = {   
       "name",   
       "age",   
       "sex",   
       "friend"
    })  
    public class Student {
        private String name;
        private String age;
        private String sex;
        private List<Friend> friend;
        
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getAge() {
            return age;
        }
     
        public void setAge(String age) {
            this.age = age;
        }
     
        public String getSex() {
            return sex;
        }
     
        public void setSex(String sex) {
            this.sex = sex;
        }
     
        @XmlElementWrapper(name="friendList")
        public List<Friend> getFriend() {
            return friend;
        }
     
        public void setFriend(List<Friend> friend) {
            this.friend = friend;
        }
     
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + ", sex=" + sex + ", friendList=" + friend + "]";
        }
     
        public static class Friend{
            private String name;
            private String age;
            private String sex;
            public String getName() {
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public String getAge() {
                return age;
            }
            public void setAge(String age) {
                this.age = age;
            }
            public String getSex() {
                return sex;
            }
            public void setSex(String sex) {
                this.sex = sex;
            }
            @Override
            public String toString() {
                return "Friend [name=" + name + ", age=" + age + ", sex=" + sex + "]";
            }
        }
    }


工具类:

    package com.solin.test;
     
    import java.io.StringReader;
    import java.io.StringWriter;
     
    import javax.xml.bind.JAXBContext;
    import javax.xml.bind.JAXBException;
    import javax.xml.bind.Marshaller;
    import javax.xml.bind.Unmarshaller;
     
    public class XmlAndJavaObjectConvert {
        /**
         * 将对象直接转换成String类型的 XML输出
         *  
         * @param obj
         * @return
         */  
        public static String convertToXml(Object obj) {  
            // 创建输出流  
            StringWriter sw = new StringWriter();  
            try {  
                // 利用jdk中自带的转换类实现  
                JAXBContext context = JAXBContext.newInstance(obj.getClass());  
      
                Marshaller marshaller = context.createMarshaller();  
                // 格式化xml输出的格式  
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,  
                        Boolean.TRUE);  
                // 将对象转换成输出流形式的xml  
                marshaller.marshal(obj, sw);  
            } catch (JAXBException e) {  
                e.printStackTrace();  
            }  
            return sw.toString();  
        }  
        
        /**
         * 将String类型的xml转换成对象
         */  
        public static Object convertXmlStrToObject(Class clazz, String xmlStr) {  
            Object xmlObject = null;  
            try {  
                JAXBContext context = JAXBContext.newInstance(clazz);  
                // 进行将Xml转成对象的核心接口  
                Unmarshaller unmarshaller = context.createUnmarshaller();  
                StringReader sr = new StringReader(xmlStr);
                xmlObject = unmarshaller.unmarshal(sr);  
            } catch (JAXBException e) {  
                e.printStackTrace();  
            }  
            return xmlObject;  
        }  
    }


输出结果如下:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <Student>
        <name>邪恶小法师</name>
        <age>110</age>
        <sex>男</sex>
        <friendList>
            <friend>
                <age>888</age>
                <name>德玛西亚之力</name>
                <sex>男</sex>
            </friend>
            <friend>
                <age>898</age>
                <name>无双剑姬</name>
                <sex>女</sex>
            </friend>
        </friendList>
    </Student>
     
    Student [name=邪恶小法师, age=110, sex=男, friendList=[Friend [name=德玛西亚之力, age=888, sex=男], Friend [name=无双剑姬, age=898, sex=女]]]
---------------------
作者:日出东方VS唯我不败
来源:优快云
原文:https://blog.youkuaiyun.com/qq_32786873/article/details/71817149
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值