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
    评论
### 回答1: 使用 JAXB 生成 Java 实体需要按照以下步骤进行: 1. 在 pom.xml 中添加 JAXB 的依赖。 ``` <dependencies> <dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> </dependencies> ``` 2. 创建一个包含 JAXB 注解的 Java 。 ``` import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Person { private String name; private int age; // 省略 getter 和 setter 方法 } ``` 3. 使用 JAXB 将 XML 数据映射到 Java 实体。 ``` import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; // 读取 XML 文件 File file = new File("person.xml"); // 创建 JAXBContext 对象 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); // 创建 Unmarshaller 对象 Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); // 将 XML 数据转换为 Java 对象 Person person = (Person) unmarshaller.unmarshal(file); // 输出结果 System.out.println(person.getName()); System.out.println(person.getAge()); ``` 4. 使用 JAXB 将 Java 实体转换为 XML 数据。 ``` import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; // 创建 Person 对象 Person person = new Person(); person.setName("张三"); person.setAge(20); // 创建 JAXBContext 对象 JAXBContext jaxbContext = JAXBContext.newInstance(Person.class); // 创建 Marshaller 对象 Marshaller marshaller = jaxbContext.createMarshaller(); // 将 Java 对象转换为 XML 数据 marshaller.marshal(person, new File("person.xml ### 回答2: Java中,JAXB(Java Architecture for XML Binding)是一种用于将XML数据Java对象进行绑定的技术。JAXB可以根据给定的XML数据自动生成Java实体的内容。 在使用JAXB时,我们需要先编写一个XSD(XML Schema Definition)文件,XSD文件定义了XML数据的结构和规则。然后,我们可以使用JAXB提供的工具将XSD文件转换为Java。 首先,我们需要导入JAXB相关的包,例如javax.xml.bind.annotationjavax.xml.bind.annotation.adapters等。 然后,我们可以使用JAXB提供的注解来进行定义。比如,使用@XmlRootElement注解来指定根元素,使用@XmlElement注解来指定元素,使用@XmlAttribute注解来指定属性等。 接下来,我们可以使用JAXB提供的工具来生成Java。可以通过命令行的方式执行xjc命令,将XSD文件转换为Java,也可以通过IDE工具中的插件或者菜单来完成这个过程。 生成的Java将包含与XML数据对应的字段和方法。我们可以通过调用相关的getter和setter方法来访问和修改这些字段的值。 此外,JAXB还提供了一些其他的功能,例如将Java对象序列化成XML数据、将XML数据反序列化为Java对象等。 总之,使用JAXB可以根据给定的XML数据自动生成相应的Java实体内容,使得XML数据Java对象之间的转换更加方便和简洁。 ### 回答3: Java使用JAXB可以根据XML数据自动生成实体内容。JAXB是Java架构用于处理JavaXML之间的数据绑定和序列化的技术。使用JAXB可以根据XML的结构自动生成相应的Java,从而方便地在程序中使用XML数据。 在使用JAXB时,首先需要定义一个XML模式文档(XML Schema),该文档描述了XML数据的结构和约束。然后,使用JAXB提供的工具来生成Java。通过运行JAXB命令行工具或者使用maven插件,可以将XML模式文档转换为Java。 生成的Java会根据XML的结构生成对应的属性(与XML元素对应),并提供相应的访问方法。同时,JAXB还可以根据XML中的属性生成对应的Java注解,进一步增强生成的Java的功能。 使用JAXB生成的实体可以方便地进行XMLJava对象之间的互相转换,通过调用JAXB提供的方法,可以将XML数据转换为Java对象,或将Java对象转换为XML数据。在转换过程中,JAXB会自动完成对象属性与XML元素或属性之间的映射,无需开发人员手动解析XML数据。 总之,JAXB是一个强大的工具,可以根据XML数据自动生成实体内容,简化了JavaXML之间的数据绑定和序列化任务。使用JAXB可以减少在处理XML数据时的开发工作量,提高代码的可读性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值