以下 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