`

JAXB 对象与XML之间转换

    博客分类:
  • XML
 
阅读更多
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。

JDK中JAXB相关的重要Annotation:

@XmlType,将Java类或枚举类型映射到XML模式类型
@XmlAccessorType(XmlAccessType.FIELD) ,控制字段或属性的序列化。FIELD表示JAXB将自动绑定Java类中的每个非静态的(static)、非瞬态的(由@XmlTransient标注)字段到XML。其他值还有XmlAccessType.PROPERTY和XmlAccessType.NONE。
@XmlAccessorOrder,控制JAXB 绑定类中属性和字段的排序。
@XmlJavaTypeAdapter,使用定制的适配器(即扩展抽象类XmlAdapter并覆盖marshal()和unmarshal()方法),以序列化Java类为XML。
@XmlElementWrapper ,对于数组或集合(即包含多个元素的成员变量),生成一个包装该数组或集合的XML元素(称为包装器)。
@XmlRootElement,将Java类或枚举类型映射到XML元素。
@XmlElement,将Java类的一个属性映射到与属性同名的一个XML元素。
@XmlAttribute,将Java类的一个属性映射到与属性同名的一个XML属性。
在以上的注解中,用的最多的是@XMLType,@XmlAccessorType,@XmlRootElement。

例子:


import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
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;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;

/**
 * 
 * 利用JAXB技术进行对象和XML文件之间的转换
 * 
 * 封装了XML转换成object,object转换成XML的代码
 * 
 * @author Steven
 * 
 */
public class XMLUtil {
	/**
	 * 将对象直接转换成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();
	}

	/**
	 * 将对象根据路径转换成xml文件
	 * 
	 * @param obj
	 * @param path
	 * @return
	 */
	public static void convertToXml(Object obj, String path) {
		try {
			// 利用jdk中自带的转换类实现
			JAXBContext context = JAXBContext.newInstance(obj.getClass());

			Marshaller marshaller = context.createMarshaller();
			// 格式化xml输出的格式
			marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
					Boolean.TRUE);
			// 将对象转换成输出流形式的xml
			// 创建输出流
			FileWriter fw = null;
			try {
				fw = new FileWriter(path);
			} catch (IOException e) {
				e.printStackTrace();
			}
			marshaller.marshal(obj, fw);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

	@SuppressWarnings("unchecked")
	/**
	 * 将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;
	}

	@SuppressWarnings("unchecked")
	/**
	 * 将file类型的xml转换成对象
	 */
	public static Object convertXmlFileToObject(Class clazz, String xmlPath) {
		Object xmlObject = null;
		try {
			JAXBContext context = JAXBContext.newInstance(clazz);
			Unmarshaller unmarshaller = context.createUnmarshaller();
			FileReader fr = null;
			try {
				fr = new FileReader(xmlPath);
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
			xmlObject = unmarshaller.unmarshal(fr);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
		return xmlObject;
	}
	
	public static void main(String[] args) {
		 //把XML转换成对象
  
        String path = "D:\\MyEclipse 8.6\\zhngdps\\book.xml";  
        System.out.println("---将File类型的xml转换成对象 Start---");  
        Book book = (Book) XMLUtil.convertXmlFileToObject(Book.class, path);  
        System.out.println(book.getPrice());  
        System.out.println("---将File类型的xml转换成对象 End---");
        
        //把对象转换成XML
        Content content = new Content("123", "战争与和平", "第三区域") ;
        Book book1 = new Book(content, "23");
        
        path = "D:\\book.xml";  
        System.out.println("---将对象转换成File类型的xml Start---");  
        XMLUtil.convertToXml(book1, path);  
        System.out.println("---将对象转换成File类型的xml End---");
	}
};
/** 
 *  
 * @author ideal 
 *  
 */  
@XmlAccessorType(XmlAccessType.FIELD)  
// XML文件中的根标识  
@XmlRootElement(name = "book")  
// 控制JAXB 绑定类中属性和字段的排序  
@XmlType(propOrder = {   
        "content",   
        "price",      
})  
class Book implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Content content ;
	private String price ;
	//需要无参构造方法
	public Book() {  
        super();  
    }  
	public Book(Content content, String price) {
		super();
		this.content = content;
		this.price = price;
	}
	public Content getContent() {
		return content;
	}
	public void setContent(Content content) {
		this.content = content;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}
	
} ;
/** 
 *  
 * @author ideal 
 *  
 */  
@XmlAccessorType(XmlAccessType.FIELD)  
// XML文件中的根标识  
@XmlRootElement(name = "User")  
// 控制JAXB 绑定类中属性和字段的排序  
@XmlType(propOrder = {   
        "id",   
        "title",   
        "file",
})  
class Content implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String id ;
	private String title ;
	private String file ;
	//需要无参构造方法
	public Content() {  
        super();  
    }  
	public Content(String id, String title, String file) {
		super();
		this.id = id;
		this.title = title;
		this.file = file;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public String getFile() {
		return file;
	}
	public void setFile(String file) {
		this.file = file;
	}
	
};



参考:http://blog.csdn.net/songdeitao/article/details/17304395
分享到:
评论
发表评论

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

相关推荐

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

    总之,JAXB是Java开发中处理XML的强大工具,通过它可以高效地进行XML与Java对象之间的转换,简化了数据交换过程。熟练掌握JAXB的使用,能大大提高开发效率,并让代码更加简洁、易于维护。在实际项目中,可以结合标签...

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

    要将XML转换为Java对象,首先需要一个对应的Java类,该类的字段与XML元素对应。JAXB通过注解这些字段来完成映射,如`@XmlElement`、`@XmlAttribute`等。以下是一个简单的例子: ```java import javax.xml.bind....

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

    Java Architecture for XML Binding (JAXB) 是一个Java标准,它提供了在Java对象和XML文档之间进行自动转换的能力。这项技术极大地简化了XML数据处理,使得开发者可以方便地将Java对象序列化为XML,或者从XML数据中...

    webservice之使用jaxb把xml转换Object或把对象转换成xml文件

    JAXB与其他XML处理技术(如DOM、SAX、StAX)相比,更注重于对象模型与XML之间的绑定,适用于需要频繁进行对象与XML转换的场景。而DOM适合处理小规模的XML文档,SAX和StAX则适用于大文件流式处理。 总结,JAXB是Java...

    JAXB xml与对象转换

    1. **自动化转换**:JAXB自动处理XML和Java对象之间的转换,无需手动编写解析和序列化的代码。 2. **效率高**:由于是Java平台的标准,JAXB的性能表现良好,且内存占用相对较低。 3. **灵活性**:支持动态绑定,可以...

    JAXB与xml相互转换实例

    Java Architecture for XML Binding(JAXB)是Java平台上的一个标准技术,它允许开发者在XML文档和Java对象之间进行无缝转换。这项技术的核心理念是通过自动的编译过程,将XML Schema(XSD)定义的数据结构映射为...

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

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

    JAVA JAXB 解析XML嵌套子节点为字符串

    在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...

    [转载] JAXB中Java对象和XML之间的转换

    在Java对象和XML之间的转换过程中,JAXB主要涉及到以下几个关键概念: 1. **Java类与XML Schema绑定**: JAXB使用`@XmlRootElement`和`@XmlElement`等注解将Java类的字段与XML元素对应。XML Schema定义了XML文档的...

    利用jaxb实现xml和bean互转

    4. **Unmarshalling**: 反之,将XML转换回Java对象的过程称为 unmarshalling。这可以通过使用JAXB的`Unmarshaller`接口完成。 **二、JAXB的使用步骤** 1. **创建Java Bean**: 首先,定义一个或多个Java类,它们...

    jaxb解析生成xml

    Java Architecture for XML Binding (JAXB) 是Java平台中用于处理XML和Java对象之间转换的一个标准技术。它允许我们将XML文档转换为Java对象,反之亦然,使得数据交换变得更加简单。在Java开发中,JAXB是处理XML数据...

    jaxb生成XML例子

    JAXB (Java Architecture for XML Binding) 是 Java 中用于对象到XML以及XML到对象转换的API。它使得开发者能够轻松地将Java对象模型映射到XML文档,并反之亦然。在给定的例子中,我们将深入理解如何使用JAXB注解来...

    处理对象与xml之间的转换demo

    对象与XML之间的转换是一项常见的任务,特别是在数据交换、配置文件处理或序列化场景中。本教程将详细介绍如何在Java、Python和C#这三种主流编程语言中实现对象到XML以及XML到对象的转换,以满足不同需求。 **1. ...

    JAXB 生成XML文件

    Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准技术,用于在Java对象和XML文档之间进行数据绑定。它允许开发人员通过简单的注解(annotations)将Java类与XML Schema映射,从而实现XML文档的序列...

    jaxb (XML操作)

    **JAXB(Java Architecture for XML Binding)** 是Java平台中用于处理XML的一种强大的工具,它提供了将XML文档与Java对象之间的映射,从而方便XML数据的解析和生成。通过JAXB,开发者可以轻松地实现XML数据到Java...

    [精品]JAVA6新特性介绍使用JAXB来实现对象与XML之间的映射.doc

    【JAVA6新特性:JAXB简介】 Java Architecture for XML Binding(JAXB)是Java平台上的一个...通过注解,JAXB提供了更加直观和灵活的方式来绑定Java对象和XML文档,这对于需要频繁进行对象-XML转换的项目尤其有价值。

    java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类

    总结来说,这个压缩包提供的内容涉及了Java中使用JAXB进行XML与Java对象之间转换的实际应用,以及辅助的DTO和文件读取工具。这些对于理解和实现XML数据处理的Java应用非常有帮助。开发者可以通过学习和使用这些示例...

    stax+jaxb进行xml解析

    - 为XML元素创建对应的Java类,并使用JAXB的注解如@XmlRootElement、@XmlElement等来标记属性与XML元素之间的映射关系。 - 可以使用@XmlAccessorType注解来指定字段或属性的默认绑定规则。 3. **JAXB解析和序列化...

    《Jaxb2 转换XML文档》学习笔记

    4. **对象到XML转换** 使用`Marshaller`类,我们可以将Java对象转换为XML文档。首先,创建一个`marshaller`实例,然后调用`marshal()`方法,传入要转换的对象和输出目的地,例如文件或`OutputStream`。 5. **XML到...

    jaxb解析xml

    2. **Java对象与XML之间的映射**:JAXB的核心功能就是建立Java类和XML元素之间的映射关系。这通常通过两种方式实现:一是使用注解(@XmlRootElement、@XmlElement等),二是通过XML绑定元数据(如XML Schema或...

Global site tag (gtag.js) - Google Analytics