xml解析工具包 Xstream的示例代码详解

互联网 17-3-8

特点

  1. 简化的API;

  2. 无映射文件;

  3. 高性能,低内存占用;

  4. 整洁的XML;

  5. 不需要修改对象,支持内部私有字段;

  6. 不需要setter/getter方法,final字段;

  7. 提供序列化接口;

  8. 自定义转换类型策略;

  9. 详细的错误诊断;

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的示例代码详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:详细介绍Xml数据解析的三种方式的示例代码

相关资讯