XStream操作XML和JavaBean对象

以下 JavaBean对象的Person、Profile、Address类是参考一个网友的,源地址没找到,在此感谢下.

1、简单的 JavaBean-->XML Java到xml,用toXML()方法:

//目标对象 
     Address address1 = new Address("上海市大连路", "450001"); 
     Address address2 = new Address("上海市临平路", "710002"); 
     List<Address> addList = new ArrayList<Address>(); 
     addList.add(address1); 
     addList.add(address2); 
     Profile profile = new Profile("JAVA工程师", "150***********", "备注说明"); 
     Person person = new Person("XStream测试", "26", profile, addList); 

     //转换装配 
     XStream xStream = new XStream(); 
     /**************    设置类别名   ****************/ 
     xStream.alias("PERSON", Person.class); 
     xStream.alias("PROFILE", Profile.class); 
     xStream.alias("ADDRESS", Address.class); 
     
     String xml = xStream.toXML(person); 
     System.out.println(xml + "\n"); 
     
     /*************  设置类成员的别名 ***************/ 
     //设置Person类的name成员别名 姓名 
     xStream.aliasField("姓名", Person.class, "name"); 
     /*[注意] 设置Person类的profile成员别名PROFILE,这个别名和Profile类的别名一致, 
      * 这样可以保持XStream对象可以从profile成员生成的xml片段直接转换为Profile成员, 
      * 如果成员profile的别名和Profile的别名不一致,则profile成员生成的xml片段不可 
      * 直接转换为Profile对象,需要重新创建XStream对象,这岂不给自己找麻烦?       */ 
     xStream.aliasField("PROFILE", Person.class, "profile"); 
     xStream.aliasField("ADDLIST", Person.class, "addlist"); 
     xStream.aliasField("Add", Address.class, "add"); 
     xStream.aliasField("Job", Profile.class, "job"); 
     xml = xStream.toXML(person); 
     System.out.println(xml + "\n"); 

     /*******  设置类成员为xml一个元素上的属性 *******/ 
     xStream.useAttributeFor(Address.class, "zipcode"); 
     /*************  设置属性的别名 ***************/ 
     xStream.aliasAttribute(Address.class, "zipcode", "Zipcode"); 
     xml = xStream.toXML(person); 
     System.out.println(xml + "\n"); 
     
        /*//对指定的类使用Annotation注解
     xStream.processAnnotations(Person.class);
        //启用Annotation注解
     xStream.autodetectAnnotations(true);
     xml = xStream.toXML(person); 
     System.out.println(xml + "\n"); 
     */
     
     //将ListBean中的集合设置空元素,即不显示集合元素标签
//	    xStream.addImplicitCollection(Person.class, "ADDLIST");
        
        //设置reference模型
//	    xStream.setMode(XStream.NO_REFERENCES);//不引用
//	    xStream.setMode(XStream.ID_REFERENCES);//id引用
        //xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);//绝对路径引用
//	    xml = xStream.toXML(person); 
//	    System.out.println(xml + "\n");

2、xml文档转换为JavaBean Xml到Java,用fromXML()方法。

注意:JavaBean对象中有的字段XML文档中可以没有,但XML文档中有的字段,JavaBean中一定要有对应的字段
StringBuilder sb = new StringBuilder();
  sb.append("<xml><TouserName><![CDATA[");//
  sb.append("toUserName123");
  sb.append("]]></TouserName><FromUserName><![CDATA[");
  sb.append("fromUserName123");
  sb.append("]]></FromUserName><CreateTime>");
  sb.append("123456");
  sb.append("</CreateTime><MsgType><![CDATA[text]]></MsgType></xml>");//
  
  
  //不需要XPP3库 ;这个类的简单设计是为了实现通用操作的。为了实现更复杂的操作你可以选择自己创建出不同方式。
    XStream xStream = new XStream(new DomDriver());
    //说明 当前节点下的内容对应哪个javabean对象
    xStream.alias("xml", BaseMessage.class);
    //注意:如果文档中的节点名称和JavaBean中字段名要一一对应,不然会报错
    xStream.aliasField("TouserName", BaseMessage.class, "ToUserName");
    BaseMessage baseMessage = (BaseMessage) xStream.fromXML(sb.toString());
    System.out.println(baseMessage.getFromUserName()+" "+baseMessage.getToUserName()+" "+baseMessage.getMsgType());

以上只是一般的操作,基本够用,如要特殊要求或深入研究下,可参考下这篇文章: http://www.cnblogs.com/hoojo/archive/2011/04/22/2025197.html



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值