加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML 和 java对象相互转换

发布时间:2020-12-16 00:14:52 所属栏目:百科 来源:网络整理
导读:xml和Java对象的转换不需要任何的第三方包,JDK自带这个转换API,方便简洁。 下面使用的是JDK自带的类,没有引用任何第三方jar包 。 Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 Java 内容对象树。 备注:marshal(序列化、排列、整理) Marshaller

xml和Java对象的转换不需要任何的第三方包,JDK自带这个转换API,方便简洁。


下面使用的是JDK自带的类,没有引用任何第三方jar包。

Unmarshaller 类使客户端应用程序能够将 XML 数据转换为 Java 内容对象树。

备注:marshal(序列化、排列、整理)

Marshaller 类使客户端应用程序能够将 Java 内容树转换回 XML 数据。


实体类(这个是要被包含的实体类,不需要加注解)一:

package org.ywzn.po;

public class User {

	private String id;

	private String name;

	private String passwrod;

	public User() {
		super();
	}

	public User(String id,String name,String passwrod) {
		super();
		this.id = id;
		this.name = name;
		this.passwrod = passwrod;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getPasswrod() {
		return passwrod;
	}

	public void setPasswrod(String passwrod) {
		this.passwrod = passwrod;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ",name=" + name + ",passwrod=" + passwrod
				+ "]";
	}

}

实体类二:

package org.ywzn.po;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Room {

	private String id;

	private String address;

	private User user;

	public Room() {
		super();
	}

	public Room(String id,String address,User user) {
		super();
		this.id = id;
		this.address = address;
		this.user = user;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	@Override
	public String toString() {
		return "Room [id=" + id + ",address=" + address + ",user=" + user
				+ "]";
	}

}

注意:

1、需要转换的model对象一定要添加@XmlRootElement注解,其里面的其他对象则不需要

2、需要转换的model对象一定要有不带参数的构造方法,包括该对象里面引用的对象。



测试Java对象转xml:

package org.ywzn.main;

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

import org.ywzn.po.Room;
import org.ywzn.po.User;

public class App {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		User user = new User("1","夏小雪","111");
		Room room = new Room("1","桂林",user);
		try {
			JAXBContext context = JAXBContext.newInstance(Room.class);
			Marshaller createMarshaller = context.createMarshaller();
			createMarshaller.marshal(room,System.out);
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

}
输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><room><address>桂林</address><id>1</id><user><id>1</id><name>夏小雪</name><passwrod>111</passwrod></user></room>


测试xml转Java对象:

package org.ywzn.main;

import java.io.StringReader;

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

import org.ywzn.po.Room;

public class App2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String xmlStr = "<?xml version="1.0" encoding="UTF-8" standalone="yes"?><room><address>厦门</address><id>1</id><user><id>1</id><name>易中天</name><passwrod>111</passwrod></user></room>";  
        try {  
            JAXBContext context = JAXBContext.newInstance(Room.class);  
            Unmarshaller unmarshaller = context.createUnmarshaller();  
            Room room = (Room)unmarshaller.unmarshal(new StringReader(xmlStr));  
            System.out.println(room);
        } catch (JAXBException e) {  
            e.printStackTrace();  
        }  
	}

}
输出:

Room [id=1,address=厦门,user=User [id=1,name=易中天,passwrod=111]]

测试编码与是否省略xml头:

package org.ywzn.main;

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

import org.ywzn.po.Room;
import org.ywzn.po.User;

public class Java2XMLSetEncode {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		User user = new User("1",user);
		try {
			JAXBContext context = JAXBContext.newInstance(Room.class);
			Marshaller createMarshaller = context.createMarshaller();
			createMarshaller.setProperty(Marshaller.JAXB_ENCODING,"UTF-8");// 编码格式
			createMarshaller
					.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true);// 是否格式化生成的xml串
			createMarshaller.setProperty(Marshaller.JAXB_FRAGMENT,false);// 是否省略xml头信息(<?xml

			createMarshaller.marshal(room,System.out);
			
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

}

输出结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<room>
    <address>桂林</address>
    <id>1</id>
    <user>
        <id>1</id>
        <name>夏小雪</name>
        <passwrod>111</passwrod>
    </user>
</room>



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

JAXBContext 类提供到 JAXB API 的客户端入口点。它提供了管理实现 JAXB 绑定框架操作所需的 XML/Java 绑定信息的抽象,这些操作包括:解组、编组和验证。


Demo的下载地址->这里

http://download.csdn.net/detail/u014175572/8721559

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读