需要导入XStream的包 public class TestXstream { /**单个对象转换为xml测试*/ @Test public void test01() { //1.创建XStream对象 XStream stream=new XStream(); //默认的名称使用的是包的名称,可以通过alias改别名 stream.alias("person",Person.class); //改属性名也是可以的,但是一般不用 stream.aliasField("pname",Person.class,"name"); //如果希望把某个子节点修改为xml中的属性也可以,但是更不常用 stream.useAttributeFor(Person.class,"id"); //2.创建对象 Person p=new Person(1,"小武",1900,24); //3.完成转换 String xml=stream.toXML(p); System.out.println(xml); } /**单个关联对象转换为xml测试*/ @Test public void test02() { XStream stream=new XStream(); stream.alias("user",User.class); stream.alias("group",Group.class); User u=new User(1,"劳动法","123",new Group(1,"财务处")); String xml=stream.toXML(u); System.out.println(xml); } /**List对象转换为xml测试*/ @Test public void test03() { XStream stream=new XStream(); stream.alias("user",User.class); stream.alias("users",List.class); List<User> us=new ArrayList<User>(); us.add(new User(1,"劳动法","123",new Group(1,"财务处"))); us.add(new User(1,"张学友","123",new Group(1,"财务处"))); us.add(new User(1,"黎明","123",new Group(1,"财务处"))); us.add(new User(1,"郭富城","123",new Group(1,"物理系"))); String xml=stream.toXML(us); System.out.println(xml); } /**属性List对象转换为xml测试*/ @Test public void test04() { XStream stream=new XStream(); stream.alias("user",User.class); stream.alias("group",Group.class); Group g=new Group(); /*默认情况在users这个节点中会封装一个users的父节点,然后才封装user * 有些时候可能不需要users节点*/ stream.addImplicitCollection(Group.class,"users"); g.addUser(new User(1,"老张","123")); g.addUser(new User(2,"老李","1234")); g.addUser(new User(3,"老刘","12345")); g.addUser(new User(4,"老玉","123456")); String xml=stream.toXML(g); System.out.println(xml); } /**xml转换为对象测试*/ @Test public void test05() { XStream stream=new XStream(); stream.alias("user",User.class); String xml="<user><id>1</id><username>aaa</username><password>123</password>" + "<group><id>1</id><name>财务处</name></group></user>"; User user=(User)stream.fromXML(xml); System.out.println(user.getId()+","+user.getUsername()+","+user.getPassword()+"," +user.getGroup().getName()); } /**xml转换为List对象测试*/ @Test public void test06() { XStream stream=new XStream(); stream.alias("user",User.class); stream.alias("users",List.class); List<User> us=(List<User>)stream .fromXML( TestXstream.class .getClassLoader() .getResourceAsStream("users.xml")); for(User user:us){ System.out.println(user.getId()+","+user.getUsername()+","+user.getPassword()+"," +user.getGroup().getName()); } } /**对象转换为json对象测试,转换json需要使用Jettison.jar*/ @Test public void test07() { XStream stream=new XStream(new JettisonMappedXmlDriver(){ /*通过覆盖以下方法可以有效删除json根节点, * 一般不适用XStream来转换json,效率不高 * 效率比较高的是Jackson*/ @Override public HierarchicalStreamWriter createWriter(Writer out) { return new JsonWriter(out,JsonWriter.DROP_ROOT_MODE); } }); stream.alias("user",User.class); stream.alias("group",Group.class); Group g=new Group(); stream.addImplicitCollection(Group.class,"users"); g.addUser(new User(1,"老张","123")); g.addUser(new User(2,"老李","1234")); g.addUser(new User(3,"老刘","12345")); g.addUser(new User(4,"老玉","123456")); String xml=stream.toXML(g); System.out.println(xml); } } /////////////////////////////////////////////// 工具库封装 public class XStreamUtil { private static XStreamUtil util; private XStreamUtil(){} public static XStreamUtil getInstance(){ if(util==null) util=new XStreamUtil(); return util; } public String obj2xml(Object obj,Map<String,Class<?>> alias){ XStream stream=new XStream(); Set<String> keys=alias.keySet(); for(String key:keys){ stream.alias(key,alias.get(key)); } return stream.toXML(obj); } public Object xml2obj(String xml,Map<String,Class<?>> alias){ XStream stream=new XStream(); Set<String> keys=alias.keySet(); for(String key:keys){ stream.alias(key,alias.get(key)); } return stream.fromXML(xml); } } 服务端发送xml protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1.由于返回的是XML对象,需要为response设置contentType response.setContentType("text/xml;charset=utf-8"); //2.获取Writer Writer out=response.getWriter(); //3.获取部门id int did=Integer.parseInt(request.getParameter("did")); //4.获取用户列表对象 List<Person> ps=persons.get(did); //5.拼接XML /*StringBuffer px=new StringBuffer(); px.append("<persons>"); for(Person p:ps){ px.append("<person>"); px.append("<id>").append(p.getId()).append("</id>"); px.append("<name>").append(p.getName()).append("</name>"); px.append("<salary>").append(p.getSalary()).append("</salary>"); px.append("<age>").append(p.getAge()).append("</age>"); px.append("</person>"); } px.append("</persons>");*/ Map<String,Class<?>> alias=new HashMap<String,Class<?>>(); alias.put("persons",List.class); alias.put("person",Person.class); String xml=XStreamUtil.getInstance().obj2xml(ps, alias); //6.通过out写回去 //out.write(px.toString()); out.write(xml); }