zoukankan      html  css  js  c++  java
  • xStream 的简单使用 xml to bean

    在写这篇技术blog时,我参看了 http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html

    也可以看看这篇,写的挺细的,我写了一个xml 到 bean. 和bean 到xml 转换的一个例子,

    一来,作为成长的一个脚印,二来,准结一些代码,以后备用,在银行和保险方面,在接口的传送数据时,经常传送的是xml报文。

    有的加密,有你的明文,都同样需要这样一个转换的功能。所以来写这篇blog,主要是自己看,如果,别的攻城师 看到这篇blog,

    并学会了一些处理业务的方法,那是我的荣幸,我会非常的高兴。

    一、准备工作

    1、 下载jar包、及官方资源

    xStream的jar下载地址:

    https://nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip

    官方的示例很全,官方参考示例:http://xstream.codehaus.org/tutorial.html

    2、项目的整体截图:

    3.1、分析:自己要创建一个xml 文件,格式:一个News下有多个school,一个school下有多个teacher,一个teacher下有多个student. 如图:

    3.2、针对上述的xml报文解析成我们需要的对象。

    4.编写拼写xml 报文的结构。

    News.java

    package com.test.picc.domain;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class News {
       private List<School> schools = new ArrayList<School>();
    
    	public List<School> getSchools() {
    		return schools;
    	}
    	
    	public void setSchools(List<School> schools) {
    		this.schools = schools;
    	}
       
    }
    

    School.java

    package com.test.picc.domain;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class School {
    	private int id;
    	private String name;
    	private String address;
    	private List<Teacher> teachers= new ArrayList<Teacher>();
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getAddress() {
    		return address;
    	}
    	public void setAddress(String address) {
    		this.address = address;
    	}
    	public List<Teacher> getTeachers() {
    		return teachers;
    	}
    	public void setTeachers(List<Teacher> teachers) {
    		this.teachers = teachers;
    	}
    	@Override
    	public String toString() {
    		 
    		return  this.id + this.name;
    	}
    	
    
    }
    


    Teacher.java

    package com.test.picc.domain;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Teacher {
        private int id ;
        private String name;
        private  int age;
        private  List<Student> students = new ArrayList<Student>();
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	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 List<Student> getStudents() {
    		return students;
    	}
    	public void setStudents(List<Student> students) {
    		this.students = students;
    	}
    	@Override
    	public String toString() {
    		 
    		return this.id+ this.name;
    	}
        
    }
    

    Student.java

    package com.test.picc.domain;
    
    public class Student {
        private int id;
        private String name;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
        
    }
    


    注:按上边所需要的xml 报文结构编写java 代码。

    BeanToXML.java

    package com.test.picc;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.test.picc.domain.News;
    import com.test.picc.domain.School;
    import com.test.picc.domain.Student;
    import com.test.picc.domain.Teacher;
    import com.thoughtworks.xstream.XStream;
    import com.thoughtworks.xstream.io.xml.DomDriver;
    
    public class BeanToXml {
       public static void main(String[] args) {
    	   List<Student> stus = new ArrayList<Student>();
    	   List<Student> stus1 = new ArrayList<Student>();
    	   List<Teacher> teas = new ArrayList<Teacher>();
    	   List<School> schools = new ArrayList<School>();
    	   News new1 = new News();
    	   new1.setSchools(schools);
    	   School s1= new School();
    	   s1.setId(1);
    	   s1.setName("beijing school");
    	   s1.setAddress("beijin");
    	   s1.setTeachers(teas);
    	   schools.add(s1);
    	   
    	   Teacher t1 = new Teacher();
    	   t1.setId(1);
    	   t1.setAge(54);
    	   t1.setName("zs");
    	   t1.setStudents(stus);
    	   
    	   Teacher t2 = new Teacher();
    	   t2.setId(2);
    	   t2.setAge(52);
    	   t2.setName("ls");
    	   t2.setStudents(stus1);
    	   
    	   teas.add(t1);
    	   teas.add(t2);
    	   
    	   Student st1= new Student();
    	   st1.setId(1);
    	   st1.setName("student1");
    	   Student st2= new Student();
    	   st2.setId(1);
    	   st2.setName("student2");
    	   stus.add(st1);
    	   stus.add(st2);
    	   
    	   Student st3= new Student();
    	   st3.setId(3);
    	   st3.setName("student3");
    	   Student st4= new Student();
    	   st4.setId(1);
    	   st4.setName("student4");
    	   stus1.add(st3);
    	   stus1.add(st4);
    //	   System.out.println(s1.getTeachers().get(0));
    	   XStream xstream = new XStream(new DomDriver());
    	   xstream.aliasPackage("","com.test.picc.domain");
           xstream.aliasField("姓名",Student.class, "name");   
    	   String xml = xstream.toXML(new1) ;
    //	   System.out.println(xml);
    	   /**
    	   xstream.alias("com.test.picc.domain.News", News.class);
    	   xstream.alias("school",School.class);
    	   xstream.alias("teacher", Teacher.class);
    	   xstream.alias("student", Student.class);
    	       * 
    	    */
    	   String news=  getXml(xml,"News");
    	   News n1 = (News)xstream.fromXML(news);
    	   List<School> schools1 = n1.getSchools();
    	   for(School sch:schools1){
    		   System.out.println(sch);
    		   for(Teacher t:sch.getTeachers()){
    			   System.out.println(t);
    		   }
    	   }
    	   System.out.println();
    	   	
       }
       /**
    	 * 获取xml报文
    	 * @param xml
    	 * @param node
    	 * @return
    	 */
    	public static  String getXml(String xml, String node){
    		int startBodyValue = xml.indexOf("<" + node + ">");
    		if(startBodyValue<0){
    			return "";
    		}
    		if (xml != null && xml.length() > 0) {
    			xml = xml.substring(startBodyValue);
    		}
    		int indexBodyValue = xml.indexOf("</" + node + ">");
    		if(indexBodyValue<0){
    			return null;
    		}
    		if (xml != null && xml.length() > 0) {
    			xml = xml.substring(0, indexBodyValue);
    		}
    		xml = xml + "</" + node + ">";
    		return xml;
    	} 
    }
    

    注:在
       xstream.alias("com.test.picc.domain.News", News.class); 是为了方便xStream 的转换之用,如果一个类中只有一个News.class 就不用此项气操作。

    结果:

    demo 下载地址:http://download.csdn.net/detail/liuc0317/5389673

  • 相关阅读:
    tomcat启动脚本
    libcrypto.so.1.0.0内容丢失导致sshd无法运行解决方案
    linux最小安装
    linux下文件删除的原理
    Web服务器磁盘满故障深入解析
    入驻博客园,新的开始!!!
    其实我们都可以变得更加优秀!
    我的未来在哪里呢!
    学会选择
    SpringBoot+vue.js如何通过post方式实现导出excel
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218270.html
Copyright © 2011-2022 走看看