xml解析工具包 Xstream的示例代码详解
时间:2017-03-08 16:29
特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象,支持内部私有字段; 不需要setter/getter方法,final字段; 提供序列化接口; 自定义转换类型策略; 详细的错误诊断; Xstream常用注解 @XStreamAlias("message") 别名注解,作用目标:类,字段 @XStreamImplicit 隐式集合 @XStreamImplicit(itemFieldName="part") 作用目标:集合字段 @XStreamConverter(SingleValueCalendarConverter.class) 注入转换器,作用目标: 对象 @XStreamAsAttribute 转换成属性,作用目标:字段 @XStreamOmitField 忽略字段,作用目标:字段 示例 1. 解析XML工具类 2. 编写Teacher类 3. 编写Student类 4. Test测试类 5. 运行结果 以上就是xml解析工具包 Xstream的示例代码详解的详细内容,更多请关注gxlsystem.com其它相关文章!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;
}
}
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;
}
}
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;
}
}
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);
}
}
<teacher name="Dave" phone="020-123456" age="46">
<student name="Aaron" age="24" address="广州"/>
<student name="Abel" age="23" address="北京"/>
</teacher>