之前解析xml文件,很多时候用的都是dom4j,但是解析不优雅-。-,想着有没有更直观、更简洁的方法,在网上搜了还真有,叫JAXB框架,他是一种XML文档与Java对象之间进行互相转换的框架
常见的 XML 注解有:
@XmlRootElement:指定 Java 类映射为 XML 文档的根元素。
@XmlElement:指定 Java 对象的一个属性映射为 XML 文档的一个元素。
@XmlAttribute:指定 Java 对象的一个属性映射为 XML 文档的一个属性。
@XmlType:指定 Java 类型的 XML 表示形式。
@XmlAccessorType:指定如何使用其他注释对 Java 类的属性进行访问。
一、xml内容
比如有如下一个xml文件
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>zx</name>
<age>24</age>
<address>
<street>changning</street>
<city>shanghai</city>
<state>aaa</state>
<zip>777777</zip>
</address>
</person>
二、定义对象
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@Data
@XmlRootElement(name = "person")
@XmlAccessorType(XmlAccessType.FIELD)
public class Person {
@XmlElement(name = "name")
private String name;
@XmlElement(name = "age")
private int age;
@XmlElement(name = "email")
private String email;
@XmlElement(name = "address")
private Address address;
}
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "address")
@XmlAccessorType(XmlAccessType.FIELD)
@Data
public class Address {
@XmlElement(name = "address")
private String street;
@XmlElement(name = "city")
private String city;
@XmlElement(name = "state")
private String state;
@XmlElement(name = "zip")
private String zipCode;
}
三、执行方法解析
File file = new File("person.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
Person person = (Person) jaxbUnmarshaller.unmarshal(file);
marshaller :
marshaller 将Java对象序列化为XML数据的过程。
Unmarshaller:
Unmarshaller管理将XML反序列化到Java对象过程