特点
简化的API;
无映射文件;
高性能,低内存占用;
整洁的XML;
不需要修改对象,支持内部私有字段;
不需要setter/getter方法,final字段;
提供序列化接口;
自定义转换类型策略;
详细的错误诊断;
Xstream常用注解
@XStreamAlias("message") 别名注解,作用目标:类,字段
@XStreamImplicit 隐式集合
@XStreamImplicit(itemFieldName="part") 作用目标:集合字段
@XStreamConverter(SingleValueCalendarConverter.class) 注入转换器,作用目标: 对象
@XStreamAsAttribute 转换成属性,作用目标:字段
@XStreamOmitField 忽略字段,作用目标:字段
示例
1. 解析XML工具类
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
/**
* 输出xml和解析xml的工具类
*/
public class XmlUtil {
private static final Logger logger = LoggerFactory.
getLogger(XmlUtil.class);
/**
* java 转换成xml
* @param obj 对象实例
* @return String xml字符串
* @Title: toXml
* @Description: TODO
*/
public static String toXml(Object obj) {
//XStream xstream=new XStream(); //默认使用xpp解析器
//指定编码解析器
XStream xstream = new XStream(new DomDriver("utf-8"));
//启用注解识别
xstream.processAnnotations(obj.getClass());
return xstream.toXML(obj);
}
/**
* 将传入xml文本转换成Java对象
* @param xmlStr
* @param cls xml对应的class类
* @return T xml对应的class类的实例对象
*/
public static <T> T toBean(String xmlStr, Class<T> cls) {
XStream xstream = new XStream();
xstream.processAnnotations(cls);
T obj = (T) xstream.fromXML(xmlStr);
return obj;
}
/**
* 写到xml文件中去
* @param obj 对象
* @param absPath 绝对路径
* @param fileName 文件名
*/
public static boolean toXMLFile(Object obj, String absPath, String fileName) {
String strXml = toXml(obj);
String filePath = absPath + fileName;
File file = new File(filePath);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) {
logger.error("file creation failed, cause is {}", e);
return false;
}
}
OutputStream ous = null;
try {
ous = new FileOutputStream(file);
ous.write(strXml.getBytes());
ous.flush();
} catch (Exception e1) {
logger.error("file write failed, cause is {}", e1);
return false;
} finally {
if (ous != null)
try {
ous.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
/**
* 从xml文件读取报文
* @param absPath 绝对路径
* @param fileName 文件名
* @param cls
*/
public static <T> T toBeanFromFile(String absPath, String fileName, Class<T> cls) throws Exception {
String filePath = absPath + fileName;
InputStream ins = null;
try {
ins = new FileInputStream(new File(filePath));
} catch (Exception e) {
throw new Exception("read {" + filePath + "} file failed!", e);
}
XStream xstream = new XStream();
xstream.processAnnotations(cls);
T obj = null;
try {
obj = (T) xstream.fromXML(ins);
} catch (Exception e) {
throw new Exception("parse {" + filePath + "} file failed!", e);
}
if (ins != null)
ins.close();
return obj;
}
}
2. 编写Teacher类
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import java.util.List;
@XStreamAlias(value = "teacher")
public class Teacher {
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private String phone;
@XStreamAsAttribute
private int age;
@XStreamImplicit(itemFieldName = "student")
private List<Student> students;
public Teacher() {
}
public Teacher(String name, String phone, int age, List<Student> students) {
this.name = name;
this.phone = phone;
this.age = age;
this.students = students;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
3. 编写Student类
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
@XStreamAlias(value = "student")
public class Student {
@XStreamAsAttribute
private String name;
@XStreamAsAttribute
private int age;
@XStreamAsAttribute
private String address;
public Student() {
}
public Student(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
4. Test测试类
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
Student student1 = new Student("Aaron", 24, "广州");
Student student2 = new Student("Abel", 23, "北京");
List<Student> students = new ArrayList<>();
students.add(student1);
students.add(student2);
Teacher teacher = new Teacher("Dave", "020-123456", 46, students);
String xml = XmlUtil.toXml(teacher);
System.out.println(xml);
}
}
5. 运行结果
<teacher name="Dave" phone="020-123456" age="46">
<student name="Aaron" age="24" address="广州"/>
<student name="Abel" age="23" address="北京"/>
</teacher>
以上就是xml解析工具包 Xstream的示例代码详解的详细内容,更多请关注php中文网其它相关文章!
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
程序员必备接口测试调试工具:点击使用
Apipost = Postman + Swagger + Mock + Jmeter
Api设计、调试、文档、自动化测试工具
网页生成APP,用做网站的技术去做APP:立即创建
手机网站开发APP、自助封装APP、200+原生模块、2000+映射JS接口按需打包
相关文章
相关视频