环境介绍
开发工具:IDEA 2022.1.1
SpringBoot版本:2.1.17.RELEASE
步骤说明
1、pom依赖
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.10</version>
</dependency>
2、xml内容
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="b001" type="数据库">Mysql排错指南</book>
<book id="b002" type="JAVA">Java从入门到精通</book>
</books>
3、Books实体类
@Data
@ToString
//元素节点名
@XStreamAlias("books")
public class Books {
//元素节点名
@XStreamImplicit(itemFieldName = "book")
List<Book> bookList;
}
4、Book实体类
@Data
@ToString
@AllArgsConstructor
@NoArgsConstructor
//元素节点名
@XStreamAlias("book")
//元素节点值
@XStreamConverter(value = ToAttributedValueConverter.class,strings = {"value"})
public class Book {
//节点属性,名字与xml中的一样
@XStreamAsAttribute
private String id;
//节点属性,名字与xml中的一样
@XStreamAsAttribute
private String type;
//元素节点值,名称任意取,与@XStreamConverter中的保持一致
private String value;
}
5、Xml工具类
public class XmlUtils {
/**
* XML转对象
* @param clazz 对象类
* @param xml xml字符串
* @param <T> T
* @return
*/
public static <T> T parseFromXml(Class<T> clazz, String xml) {
// 创建解析XML对象
XStream xStream = new XStream(new DomDriver());
// 允许访问特定类型
xStream.addPermission(NoTypePermission.NONE);
xStream.allowTypeHierarchy(clazz);
// 处理注解
xStream.processAnnotations(clazz);
// 将XML字符串转为bean对象
T t = (T) xStream.fromXML(xml);
return t;
}
/**
* 对象转xml
* @param obj 对象
* @return
*/
public static String toXml(Object obj) {
XStream xStream = new XStream(new DomDriver());
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
}
}
6、测试
@org.junit.Test
public void test() throws Exception {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<books>\n" +
" <book id=\"b001\" type=\"数据库\">Mysql排错指南</book>\n" +
" <book id=\"b002\" type=\"JAVA\">Java从入门到精通</book>\n" +
"</books>";
Books books1 = XmlUtils.parseFromXml(Books.class, xml);
System.out.println(books1);
System.out.println("------------------------");
Books books2 = new Books();
Book book3 = new Book("b0003","数据结构","数据结构与算法分析");
Book book4 = new Book("b0004","Python","Python学习手册");
List<Book> bookList = new ArrayList<>();
bookList.add(book3);
bookList.add(book4);
books2.setBookList(bookList);
System.out.println(XmlUtils.toXml(books2));
}
7、结果
Books(bookList=[Book(id=b001, type=数据库, value=Mysql排错指南), Book(id=b002, type=JAVA, value=Java从入门到精通)])
------------------------
<books>
<book id="b0003" type="数据结构">数据结构与算法分析</book>
<book id="b0004" type="Python">Python学习手册</book>
</books>