1.首先介绍JAXBContext解析xml
JAXBContext是javax.xml.bind包下的类,它提供了绑定xml/java 的能力。
被绑定的java实体的类上必须包含 @XmlRootElement注解,里面包含name属性,可以设置根节点的名称。
下面是一个实体类
package com.wl.wechat.model;
import java.io.ByteArrayOutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by wl on 2021/6/18.
*/
@XmlRootElement(name = "JaxbXmlBean")
public class JaxbXmlBean {
private Integer id;
private String name;
private String nickName;
private XmlSubBean xmlSubBean;
private List<XmlSubBean> subBeanList;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public XmlSubBean getXmlSubBean() {
return xmlSubBean;
}
public void setXmlSubBean(XmlSubBean xmlSubBean) {
this.xmlSubBean = xmlSubBean;
}
public List<XmlSubBean> getSubBeanList() {
return subBeanList;
}
public void setSubBeanList(List<XmlSubBean> subBeanList) {
this.subBeanList = subBeanList;
}
public static class XmlSubBean{
private Integer subId;
private String subName;
private String subNickName;
public Integer getSubId() {
return subId;
}
public void setSubId(Integer subId) {
this.subId = subId;
}
public String getSubName() {
return subName;
}
public void setSubName(String subName) {
this.subName = subName;
}
public String getSubNickName() {
return subNickName;
}
public void setSubNickName(String subNickName) {
this.subNickName = subNickName;
}
}
public static void main(String[] args) throws Exception{
JaxbXmlBean xmlBean = new JaxbXmlBean();
xmlBean.setId(1);
xmlBean.setName("wl");
xmlBean.setNickName("你好");
XmlSubBean subBean = new XmlSubBean();
subBean.setSubId(12);
subBean.setSubName("sub_wl");
subBean.setSubNickName("sub_nickName");
xmlBean.setXmlSubBean(subBean);
List<XmlSubBean> list = new ArrayList<>();
list.add(subBean);
list.add(subBean);
list.add(subBean);
xmlBean.setSubBeanList(list);
JAXBContext context = JAXBContext.newInstance(JaxbXmlBean.class);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
context.createMarshaller().marshal(xmlBean,bos);
String xml = new String(bos.toByteArray());
System.out.println(xml);
JaxbXmlBean xmlBean1 = (JaxbXmlBean) context.createUnmarshaller().unmarshal(new ByteArrayInputStream(xml.getBytes()));
System.out.println(xmlBean1);
}
}
运行main方法,输出的xml 如下
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JaxbXmlBean>
<id>1</id>
<name>wl</name>
<nickName>你好</nickName>
<subBeanList>
<subId>12</subId>
<subName>sub_wl</subName>
<subNickName>sub_nickName</subNickName>
</subBeanList>
<subBeanList>
<subId>12</subId>
<subName>sub_wl</subName>
<subNickName>sub_nickName</subNickName>
</subBeanList>
<subBeanList>
<subId>12</subId>
<subName>sub_wl</subName>
<subNickName>sub_nickName</subNickName>
</subBeanList>
<xmlSubBean>
<subId>12</subId>
<subName>sub_wl</subName>
<subNickName>sub_nickName</subNickName>
</xmlSubBean>
</JaxbXmlBean>