`
sskhnje
  • 浏览: 15553 次
  • 性别: Icon_minigender_1
  • 来自: 昆明
文章分类
社区版块
存档分类
最新评论

转:java与xml相互转化 jaxb

 
阅读更多

 

转自:http://www.tuicool.com/articles/zEnQBn

 

 

先贴java

package a;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import javax.xml.bind.annotation.XmlType;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Student")
public class Student {

    /**
     * 做为node的属性
     */
    @XmlAttribute
    private String name;

    private String sex;

    /**
     * 自定义节点名称
     */
    @XmlElement(name = "theAge")
    private Integer age;
    
    /**
     * 不转化xml, 忽略掉
     */
    @XmlTransient
    private String remark = "remark...";

    public Student() {
        super();
    }

    public Student(String name, String sex, Integer age) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getRemark() {
        return remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

}

 

 

package a;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

@XmlType
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "Teacher")
public class Teacher {

    private String name;

    private String sex;

    private Integer age;

    /**
     * 在Student数组外面加一个包含节点students
     */
    @XmlElementWrapper(name = "students")
    @XmlElement(name="Student")
    private List<Student> students;

    public Teacher() {
        super();
    }

    public Teacher(String name, String sex, Integer age) {
        super();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public List<Student> getStudents() {
        return students;
    }

    public void setStudents(List<Student> students) {
        this.students = students;
    }

}

 

 

 

package a;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

public class JaxbUtil {
    
    /**
     * java -> xml String
     * 
     */
    public static String java2xml(Object obj, Class beanClass) throws Exception {
        
        JAXBContext context = JAXBContext.newInstance(beanClass);
        // 根据上下文获取marshaller对象
        Marshaller marshaller = context.createMarshaller();
        // 设置编码字符集
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        // 格式化XML输出,有分行和缩进
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        // 打印到控制台
        //marshaller.marshal(obj, System.out);

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        marshaller.marshal(obj, baos);
        String xmlObj = new String(baos.toByteArray());
        return xmlObj.replace(" standalone=\"yes\"", "");
      }
      
      /**
       * java -> xml file
       * 
       */
      public static void java2xmlFile(Object obj, Class beanClass, File file) throws Exception {
        JAXBContext context = JAXBContext.newInstance(beanClass);
        // 根据上下文获取marshaller对象
        Marshaller marshaller = context.createMarshaller();
        // 设置编码字符集
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        // 格式化XML输出,有分行和缩进
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        // 打印到控制台
        //marshaller.marshal(obj, System.out);
        marshaller.marshal(obj, file);
      }
      
      /**
       * xml -> java
       * 
       */
      public static <T> T xml2java(String xml, Class<T> beanClass) throws Exception {
        T bean = beanClass.newInstance();
        JAXBContext context = JAXBContext.newInstance(beanClass);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        bean = (T) unmarshaller.unmarshal(new StringReader(xml));
        return bean;
      }
      
      
      /**
       * xml file -> java
       * 
       */
      public static <T> T xmlFile2java(File file, Class<T> beanClass) throws Exception {
        T bean = beanClass.newInstance();
        JAXBContext context = JAXBContext.newInstance(beanClass);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        bean = (T) unmarshaller.unmarshal(file);
        return bean;
      }
      
      
}

 

 

package a;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class JaxbTest {
    public static void main(String[] args) {
        try {
            Teacher teacher = new Teacher("JuanJuan", "女", 22);
            Student student = new Student("Joyce.Luo", "男", 21);
            Student student2 = new Student("Phang.Law", "男", 18);
            
          
            List<Student> stuList = new ArrayList<Student>();
            stuList.add(student);
            stuList.add(student2);
            
            teacher.setStudents(stuList);
            
            String xmlStr = JaxbUtil.java2xml(student, Student.class);
            System.out.println("\n对象转换为xml:\n" + xmlStr);
            
            String xmlTeaStr = JaxbUtil.java2xml(teacher, Teacher.class);
            System.out.println("\n包含集合的对象转换为xml:\n" + xmlTeaStr);
            
            
            String xmlStr3 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Student name=\"Joyce.Luo\"><sex>男</sex><theAge>21</theAge></Student>";
            Student student3 = JaxbUtil.xml2java(xmlStr3, Student.class);
            System.out.println("xml字符串转化为对象:" + student3.getName());

            File file = new File("file/str.xml");
            if (file.exists()) {
                file.delete();
            }
            
            JaxbUtil.java2xmlFile(teacher, Teacher.class, file);
            System.out.println("\n对象转换为xml file:" + file.length());
      
            Teacher tea = JaxbUtil.xmlFile2java(file, Teacher.class);
            System.out.println("\nxml file转换为对象:\n" + tea.getName() + "\t" + tea.getSex() + "\t" + tea.getStudents().get(0).getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 

 

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    JAXB技术实现xml与java对象互相转化代码教程

    使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...

    jdk10+ java.lang.NoClassDefFoundError: javax/xml/ws/Service 错误

    jdk升级之后出现异常:java.lang.NoClassDefFoundError: javax/xml/ws/Service 1、解决方案jdk降级至1.8之前 2、由于JDK9以后,去除了javax.xml包需要引入对应的jar包 &lt;groupId&gt;javax.activation &lt;artifactId&gt;...

    JAXB工具类 xml转为java对象 java对象转为xml

    JAXB工具类 xml转为java对象 java对象转为xml ,本人亲测,可以使用!!!

    jaxb-api-2.3.0-API文档-中英对照版.zip

    标签:javax、xml、bind、jaxb、api、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准...

    利用JAXB进行xml和javabean之间转换

    NULL 博文链接:https://luyuwww.iteye.com/blog/1988355

    通过JAXB实现完成java对象和xml的互相转换

    NULL 博文链接:https://xiongpan0807.iteye.com/blog/1832124

    JAXB完成XML和Java对象的互转

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...

    JAXB与xml相互转换实例

    JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB与xml相互转换实例。

    JAXB xml与对象转换

    jaxb将xml转换为对象或将对象转换为xml。测试通过。

    java 解析XML性能对比分析Demo

    Java 解析XML性能分析Demo。包含了DOM解析,SAX解析, JDOM解析,DOM4J解析,JAXB解析例子。

    jaxb xml 转map

    jaxb xml 转map

    jaxb 2.0 java architecture for xml binding

    THE Java™Architecture for XML Binding (JAXB) provides a fast and convenient way to bind between XML schemas and Java representations, making it easy for Java developers to incorporate XML data and ...

    JAXB XML TO JAVA

    JAXB XML TO JAVA,文件转化 生成java代码

    用JAXB生成一个XML

    Java XML绑定架构(JAXB)提供了一个绑定编译器,xjc,来从一个XML模式中生成Java类。用JAXB的xjc生成的Java类代表了在XML模式中不同的元素和复杂类型(complexType)。(一个复杂类型通过指定属性和元素内的元素来提供对...

    Java and XML, 3rd Edition

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    JAXB 利用xsd文件生成java类

    编写xsd文件,利用jaxb生成java类。

    JAXB资料.rar

    JAXB_2.2_API.chm,Java+XML绑定技术.doc JAXB_2.2_API.chm,Java+XML绑定技术.doc JAXB_2.2_API.chm,Java+XML绑定技术.doc JAXB_2.2_API.chm,Java+XML绑定技术.doc JAXB_2.2_API.chm,Java+XML绑定技术.doc JAXB_2.2_...

    jaxb生成XML例子

    使用jaxb生成XML例子,含有例子和注解解析

    JAVA与XML.rar

    《Java与XML》(第三版)的内容涵盖了所有主要的Java XML处理库程序,全面讲解了SAX、DOM、StAX、JDOM以及dom4j的应用程序编程接口,同时还囊括了最新版本的用于XML处理的Java应用程序编程接口(JAXP)和用于XML绑定...

    jaxb-api-2.3.0-API文档-中文版.zip

    标签:javax、xml、bind、jaxb、api、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译...

Global site tag (gtag.js) - Google Analytics