添加依赖:
<!--xml 解析工具-->
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
// 实体类需要加上注解
@XmlRootElement(name = "User")
public class User {
private String name;
private Integer age;
private String info;
private String hobby;
public String getName() {
return name;
}
@XmlAttribute
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
@XmlAttribute
public void setAge(Integer age) {
this.age = age;
}
public String getInfo() {
return info;
}
@XmlElement(name = "info")
public void setInfo(String info) {
this.info = info;
}
public String getHobby() {
return hobby;
}
@XmlElement(name = "hobby")
public void setHobby(String hobby) {
this.hobby = hobby;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", info='" + info + '\'' +
", hobby='" + hobby + '\'' +
'}';
}
}
/**
* 将 xml 字符串转换成对象
* @param xmlText xml字符串
* @param clazz 返回值对象的类型
* @return 对象
*/
private <T> T parseXmlStringToObj(String xmlText, Class<T> clazz) {
return JAXB.unmarshal(new StringReader(xmlText.trim()), clazz);
}
使用:
String xml =
"<User age=\"18\" name=\"Jack\">" +
" <hobby>Swim</hobby>" +
" <info>Worker</info>" +
"</User>";
User userResult = XmlUtils.parseXmlStringToObj(xml, User.class);
System.out.println(userResult);
输入结果:
User{name='Jack', age='18', info='Worker', hobby='Swim'}
/**
* 将对象转换成 xml 字符串
* @param obj 对象
* @param clazz 对象的类型
* @return xml 字符串
*/
public <T> String parseObjToXmlString(T obj, Class<T> clazz) {
String result = "";
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Marshaller marshaller = jaxbContext.createMarshaller();
// 格式化输出
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 编码格式
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
// 去掉默认报文头
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
// 不进行转义字符的处理
marshaller.setProperty(CharacterEscapeHandler.class.getName(), new CharacterEscapeHandler() {
@Override
public void escape(char[] ch, int start,int length, boolean isAttVal, Writer writer) throws IOException {
writer.write(ch, start, length);
}
});
StringWriter writer = new StringWriter();
// 将对象转换成 xml 字符串,存入 writer 中
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (JAXBException e) {
e.printStackTrace();
}
if (StringUtils.isEmpty(result)) {
throw new RuntimeException(String.format("将 【%s】 类型的对象转换成 xml 文本失败", clazz.getName()));
}
return result;
}
使用:
User user = new User();
user.setName("Jack");
user.setAge(18);
user.setInfo("Worker");
user.setHobby("Swim");
String xmlString = XmlUtils.parseObjToXmlString(user, User.class);
System.out.println(xmlString);
输出结果:
<User age="18" name="Jack">
<hobby>Swim</hobby>
<info>Worker</info>
</User>