android xstream

http://blog.csdn.net/shimiso/article/details/7743639

 

 

http://www.oschina.net/code/snippet_116183_14202


import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

/**
 *@ClassName:PersonBean
 *@author: chenyoulong  Email: chen.youlong@payeco.com
 *@date :2012-9-28 下午3:10:47
 *@Description:TODO 
 */
@XStreamAlias("person")
public class PersonBean {
	@XStreamAlias("firstName")
	private String firstName;
	@XStreamAlias("lastName")
	private String lastName;
	
	@XStreamAlias("telphone")
	private PhoneNumber tel;
	@XStreamAlias("faxphone")
	private PhoneNumber fax;
	
	//测试一个标签下有多个同名标签
	@XStreamAlias("friends")
	private Friends friend;
	
	//测试一个标签下循环对象
	@XStreamAlias("pets")
	private Pets pet;
	
	
	//省略setter和getter
}
@XStreamAlias("phoneNumber")
	public  class PhoneNumber{
		@XStreamAlias("code")
		private int code;
		@XStreamAlias("number")
		private String number;
		
            //省略setter和getter
		
	}

/**
	 * 用Xstream注解的方式实现:一个标签下有多个同名标签 
	 *@ClassName:Friends
	 *@author: chenyoulong  Email: chen.youlong@payeco.com
	 *@date :2012-9-28 下午4:32:24
	 *@Description:TODO 5个name 中国,美国,俄罗斯,英国,法国
	 *http://blog.csdn.net/menhuanxiyou/article/details/5426765
	 */
	public static class Friends{
		@XStreamImplicit(itemFieldName="name")   //itemFieldName定义重复字段的名称,
		/*<friends>								<friends>
	    	<name>A1</name>							<String>A1</String>
	    	<name>A2</name>    如果没有,则会变成	=====>		<String>A1</String>
	    	<name>A3</name>							<String>A1</String>
	  	</friends>								</friends>
	  */
		private List<String> name;

		public List<String> getName() {
			return name;
		}

		public void setName(List<String> name) {
			this.name = name;
		}
	}

//测试同一标签下循环某一对象
	public  class Animal{
		@XStreamAlias("name")
		private String name;
		@XStreamAlias("age")
		private int age;
		public Animal(String name,int age){
			this.name=name;
			this.age=age;
		}
		
              //省略setter和getter
	}
	

/**
	 * 测试同一标签下循环某一对象
	 *@ClassName:Pets
	 *@author: chenyoulong  Email: chen.youlong@payeco.com
	 *@date :2012-9-28 下午6:26:01
	 *@Description:TODO
	 */
	public class Pets{
		@XStreamImplicit(itemFieldName="pet")
		private List<Animal> animalList;
		
		public List<Animal> getAnimalList() {
			return animalList;
		}

		public void setAnimalList(List<Animal> animalList) {
			this.animalList = animalList;
		}
		
	}

/**
	 * 输出xml和解析xml的工具类
	 *@ClassName:XmlUtil
	 *@author: chenyoulong  Email: chen.youlong@payeco.com
	 *@date :2012-9-29 上午9:51:28
	 *@Description:TODO
	 */
	public class XmlUtil{
		/**
		 * java 转换成xml
		 * @Title: toXml 
		 * @Description: TODO 
		 * @param obj 对象实例
		 * @return String xml字符串
		 */
		public static String toXml(Object obj){
			XStream xstream=new XStream();
//			XStream xstream=new XStream(new DomDriver()); //直接用jaxp dom来解释
//			XStream xstream=new XStream(new DomDriver("utf-8")); //指定编码解析器,直接用jaxp dom来解释
			
			如果没有这句,xml中的根元素会是<包.类名>;或者说:注解根本就没生效,所以的元素名就是类的属性
			xstream.processAnnotations(obj.getClass()); //通过注解方式的,一定要有这句话
			return xstream.toXML(obj);
		}
		
		/**
		 *  将传入xml文本转换成Java对象
		 * @Title: toBean 
		 * @Description: TODO 
		 * @param xmlStr
		 * @param cls  xml对应的class类
		 * @return T   xml对应的class类的实例对象
		 * 
		 * 调用的方法实例:PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
		 */
		public static <T> T  toBean(String xmlStr,Class<T> cls){
			//注意:不是new Xstream(); 否则报错:java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory
			XStream xstream=new XStream(new DomDriver());
			xstream.processAnnotations(cls);
			T obj=(T)xstream.fromXML(xmlStr);
			return obj;			
		} 

       /**
	     * 写到xml文件中去
	     * @Title: writeXMLFile 
	     * @Description: TODO 
	     * @param obj 对象
	     * @param absPath 绝对路径
	     * @param fileName	文件名
	     * @return boolean
	     */
	  
	    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) {
					log.error("创建{"+ filePath +"}文件失败!!!" + Strings.getStackTrace(e));
					return false ;
				}
	    	}// end if 
	    	OutputStream ous = null ;
			try {
				ous = new FileOutputStream(file);
				ous.write(strXml.getBytes());
				ous.flush();
			} catch (Exception e1) {
				log.error("写{"+ filePath +"}文件失败!!!" + Strings.getStackTrace(e1));
				return false;
			}finally{
				if(ous != null )
					try {
						ous.close();
					} catch (IOException e) {
						log.error("写{"+ filePath +"}文件关闭输出流异常!!!" + Strings.getStackTrace(e));
					}
			}
			return true ;
	    }
	    
	    /**
	     * 从xml文件读取报文
	     * @Title: toBeanFromFile 
	     * @Description: TODO 
	     * @param absPath 绝对路径
	     * @param fileName 文件名
	     * @param cls
	     * @throws Exception 
	     * @return T
	     */
	    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("读{"+ filePath +"}文件失败!", e);
			}
	    	
	    	String encode = useEncode(cls);
			XStream xstream=new XStream(new DomDriver(encode));
			xstream.processAnnotations(cls);
			T obj =null;
			try {
				obj = (T)xstream.fromXML(ins);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new Exception("解析{"+ filePath +"}文件失败!",e);
			}
			if(ins != null)
				ins.close();
			return obj;			
	    } 
		
	}

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.json.JsonWriter.Format;
import com.thoughtworks.xstream.io.xml.DomDriver;

/**
 *@ClassName:PersonTest
 *@author: chenyoulong  
 *@date :2012-9-28 下午3:25:09
 *@Description:TODO 
 */
public class PersonTest {

	/** 
	 * @Title: main 
	 * @Description: TODO 
	 * @param args 
	 * @return void  
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		PersonBean per=new PersonBean();
		per.setFirstName("chen");
		per.setLastName("youlong");
		
		PhoneNumber tel=new PhoneNumber();
		tel.setCode(137280);
		tel.setNumber("137280968");
		
		PhoneNumber fax=new PhoneNumber();
		fax.setCode(20);
		fax.setNumber("020221327");
		per.setTel(tel);
		per.setFax(fax);
		
		
		//测试一个标签下有多个同名标签
		List<String> friendList=new ArrayList<String>();
		friendList.add("A1");
		friendList.add("A2");
		friendList.add("A3");
		Friends friend1=new Friends();
		friend1.setName(friendList);
		per.setFriend(friend1);
		
		//测试一个标签下循环对象
		Animal dog=new Animal("Dolly",2);
		Animal cat=new Animal("Ketty",2);
		List<Animal> petList=new ArrayList<Animal>();
		petList.add(dog);
		petList.add(cat);
		Pets pet=new Pets();
		pet.setAnimalList(petList);
		per.setPet(pet);
		
                    //java对象转换成xml
		String xml=XmlUtil.toXml(per);
		System.out.println("xml==="+xml);
		
	}
}


public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//toXml
//		String xmlStr=new PersonTest().toXml();
		
		//toBean
//		PersonBean per=new PersonTest().toBean();
		String xmlStr="<person>"+
				  "<firstName>chen</firstName>"+
				  "<lastName>youlong</lastName>"+
				  "<telphone>"+
				    "<code>137280</code>"+
				    "<number>137280968</number>"+
				  "</telphone>"+
				  "<faxphone>"+
				    "<code>20</code>"+
				    "<number>020221327</number>"+
				  "</faxphone>"+
				  "<friends>"+
				    "<name>A1</name>"+
				    "<name>A2</name>"+
				    "<name>A3</name>"+
				  "</friends>"+
				  "<pets>"+
				    "<pet>"+
				      "<name>doly</name>"+
				      "<age>2</age>"+
				    "</pet>"+
				    "<pet>"+
				      "<name>Ketty</name>"+
				      "<age>2</age>"+
				    "</pet>"+
				  "</pets>"+
				"</person>";
//用泛型的知识
		PersonBean person=XmlUtil.toBean(xmlStr, PersonBean.class);
		System.out.println("person=firstname=="+person.getFirstName());
		System.out.println("person==Friends==name1=="+person.getFriend().getName().get(0));
		System.out.println("person==Pets==name2=="+person.getPet().getAnimalList().get(1).getName());

/*
//效果与以下方法类同,(以下代码较为直观)
XStream xstream=new XStream(new DomDriver()); //注意:不是new Xstream(); 否则报错:

		xstream.processAnnotations(PersonBean.class);
		PersonBean person=(PersonBean)xstream.fromXML(xmlStr);
		System.out.println("person=firstname=="+person.getFirstName());
		System.out.println("person==Friends==name1=="+person.getFriend().getName().get(0));
		System.out.println("person==Pets==name=="+person.getPet().getAnimalList().get(1).getName());
*/

		
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值