以下 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","profile"); xStream.aliasField("ADDLIST","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