小编给大家分享一下xml解析工具包Xstream的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
创新互联公司是一家集网站建设,鼓楼企业网站建设,鼓楼品牌网站建设,网站定制,鼓楼网站建设报价,网络营销,网络优化,鼓楼网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
特点
简化的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 staticT toBean(String xmlStr, Class 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 toBeanFromFile(String absPath, String fileName, Class 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 Liststudents; public Teacher() { } public Teacher(String name, String phone, int age, List 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 getStudents() { return students; } public void setStudents(List 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, "北京"); Liststudents = 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. 运行结果
以上是“xml解析工具包Xstream的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!