xml解析工具包 Xstream
发布时间:2020-12-16 08:22:01 所属栏目:百科 来源:网络整理
导读:特点 简化的API; 无映射文件; 高性能,低内存占用; 整洁的XML; 不需要修改对象,支持内部私有字段; 不需要setter/getter方法,final字段; 提供序列化接口; 自定义转换类型策略; 详细的错误诊断; Xstream常用注解 @XStreamAlias("message") 别名注解,作用目标
特点
Xstream常用注解
示例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,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,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> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |