Java类和xml数据 互相转化

<?xml version="1.0" encoding="UTF-8"?>
<xml>
  <ToUserName>toUser</ToUserName>
  <FromUserName>fromUser</FromUserName>
  <CreateTime>1348831860</CreateTime>
  <MsgType>text</MsgType>
  <Content>this is a test</Content>
  <MsgId>1234567890123456</MsgId>
</xml>

上面文件名字 ax.xml

WxMessage 类

package sys.cdsoft.entity;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="xml") //规定根节点信息  如果不指定 则是类名小写
@XmlAccessorType(XmlAccessType.FIELD) // 表示 根据属性名称映射  要求名称和xml数据的节点名称一样
public class WxMessage {
	 protected String FromUserName;
	    // 发送方帐号(一个OpenID)
	    protected String ToUserName;
	    // 消息创建时间
	    protected Long CreateTime;
	    
	    //点击key或者跳转的页面
	    protected String EventKey;
	    
	    //event事件
	    
	    protected String Event;
	    
	    //二维码
	    protected String Ticket;
	    
	    
	    /**
	     * 消息类型
	     * text 文本消息
	     * image 图片消息
	     * voice 语音消息
	     * video 视频消息
	     * music 音乐消息
	     */
	    protected String MsgType;
	    // 消息id
	    protected Long MsgId;
	    // 文本内容
	    private String Content;
	    // 图片链接(由系统生成)
	    private String PicUrl;
	    // 图片消息媒体id,可以调用多媒体文件下载接口拉取数据
	    private String MediaId;
		public String getFromUserName() {
			return FromUserName;
		}
		public void setFromUserName(String fromUserName) {
			FromUserName = fromUserName;
		}
		public String getToUserName() {
			return ToUserName;
		}
		public void setToUserName(String toUserName) {
			ToUserName = toUserName;
		}
		public Long getCreateTime() {
			return CreateTime;
		}
		public void setCreateTime(Long createTime) {
			CreateTime = createTime;
		}
		public String getMsgType() {
			return MsgType;
		}
		public void setMsgType(String msgType) {
			MsgType = msgType;
		}
		public Long getMsgId() {
			return MsgId;
		}
		public void setMsgId(Long msgId) {
			MsgId = msgId;
		}
		public String getContent() {
			return Content;
		}
		public void setContent(String content) {
			Content = content;
		}
		public String getPicUrl() {
			return PicUrl;
		}
		public void setPicUrl(String picUrl) {
			PicUrl = picUrl;
		}
		public String getMediaId() {
			return MediaId;
		}
		public void setMediaId(String mediaId) {
			MediaId = mediaId;
		}
		
		
		public String getEventKey() {
			return EventKey;
		}
		public void setEventKey(String eventKey) {
			EventKey = eventKey;
		}
		public String getEvent() {
			return Event;
		}
		public void setEvent(String event) {
			Event = event;
		}
		
		public String getTicket() {
			return Ticket;
		}
		public void setTicket(String ticket) {
			Ticket = ticket;
		}
		@Override
		public String toString() {
			return "WxMessage [FromUserName=" + FromUserName + ", ToUserName=" + ToUserName + ", CreateTime="
					+ CreateTime + ", EventKey=" + EventKey + ", Event=" + Event + ", Ticket=" + Ticket + ", MsgType="
					+ MsgType + ", MsgId=" + MsgId + ", Content=" + Content + ", PicUrl=" + PicUrl + ", MediaId="
					+ MediaId + "]";
		}
		
		
	
	    
}

student 类

package sys.cdsoft.entity;

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

@XmlRootElement(name="xml") //规定根节点信息  如果不指定 则是类名小写
@XmlAccessorType(XmlAccessType.FIELD) // 表示 根据属性名称映射  要求名称和xml数据的节点名称一样
public class Student {
	
	private String Name;
	
	private String Age;
	//@XmlElementWrapper注解可以在原xml结点上再包装一层xml,但仅允许出现在数组或集合属性上。
	@XmlElementWrapper(name="Gay")
	private String[] Gender;
	
	

	public String getName() {
		return Name;
	}

	public void setName(String name) {
		Name = name;
	}

	public String getAge() {
		return Age;
	}

	public void setAge(String age) {
		Age = age;
	}

	public String[] getGender() {
		return Gender;
	}

	public void setGender(String[] gender) {
		Gender = gender;
	}

	@Override
	public String toString() {
		return "Student [Name=" + Name + ", Age=" + Age + ", Gender=" + Gender + "]";
	}

	public Student(String name, String age, String[] gender) {
		super();
		Name = name;
		Age = age;
		Gender = gender;
	}

	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	
	
}

测试类

package sys.cdsoft.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.io.StringWriter;

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

import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import sys.cdsoft.entity.Student;
import sys.cdsoft.entity.WxMessage;

public class XmlToJava {
	public static void main(String[] args) throws JAXBException, IOException {

		InputStream resourceAsStream = XmlToJava.class.getClassLoader().getResourceAsStream("ax.xml");
		WxMessage pojo = toPojo(WxMessage.class, resourceAsStream);
		System.out.println(pojo);
		Student s =new Student("mary", "22", new String[] {"女"});
		String xml = toXml(s);
		System.out.println(s);
	}
	
	public static <T>T toPojo(Class<T> pojo,InputStream in) throws JAXBException {
		JAXBContext context = JAXBContext.newInstance(pojo);
		Unmarshaller un = context.createUnmarshaller();
		T tjo = (T)un.unmarshal(in);
		return tjo;
	}

	public static <T>String toXml(T pojo) throws JAXBException{
		JAXBContext context = JAXBContext.newInstance(pojo.getClass());
		Marshaller ma =context.createMarshaller();
		// 修改输出格式  默认在同一行输出  修改成这样 格式化输出
		ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		// 修改输出编码
		ma.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
		// 去掉头部信息
		ma.setProperty(Marshaller.JAXB_FRAGMENT, true);
		StringWriter writer = new StringWriter();
		ma.marshal(pojo, writer);
		String xml = writer.toString();
		System.out.println(xml);
		return xml;
		
	}
	
}

输出结果
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值