有这样的javabean 
public class People {

private String sex;

private List userList;
}public calss User {
private String name;
private String address;
}这样的javabean 用XStream 怎么才能转成这样格式的呢?<people>
<sex>sex</sex>
<user>
<name>name</name>
<address>address</address>
</user>
<user>
<name>name</name>
<address>address</address>
</user>
<user>
<name>name</name>
<address>address</address>
</user>
</people>或者说是  这样的xml用XStream 怎样才能转成 People 类呢???

解决方案 »

  1.   

    用注解的代码是这样的:@XStreamAlias("people")
    public class People {
        
        private String sex;
        
        @XStreamImplicit
        private List<User> userList; public String getSex() {
    return sex;
    } public void setSex(String sex) {
    this.sex = sex;
    } public List<User> getUserList() {
    return userList;
    } public void setUserList(List<User> userList) {
    this.userList = userList;
    }
    }@XStreamAlias("user")
    public class User {
        private String name;
        private String address;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getAddress() {
    return address;
    }
    public void setAddress(String address) {
    this.address = address;
    }
    }public class WritePeople {    public static void main(String[] args) {
            People p = new People();        p.setSex("male");        List<User> list = new ArrayList<User>();
            User u = new User();
            u.setName("zhang");
            u.setAddress("beijing");
            list.add(u);
            
            p.setUserList(list);
            
            //Serialize the object
            XStream xs = new XStream();
            xs.processAnnotations(People.class);        //Write to a file in the file system
            try {
                FileOutputStream fs = new FileOutputStream("people.txt");
                xs.toXML(p, fs);
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
        }
    }public class ReadPeople {    public static void main(String[] args) {
            XStream xs = new XStream(new DomDriver());
            xs.processAnnotations(People.class);
            People p = new People();        try {
                FileInputStream fis = new FileInputStream("people.txt");
                xs.fromXML(fis, p);            //print the data from the object that has been read
                System.out.println(p.getUserList().get(0).getName());        } catch (FileNotFoundException ex) {
                ex.printStackTrace();
            }
        }
    }
      

  2.   

    1.dto结构如下:public class people{ private  Sex sex; private  List<User> user;
    //getter,setter}public class Sex{ private String sex; //getter,setter
    }
    public classs User{ private String name; private String address; //getter,setter
    }2.处理代码(这是读取lz提供的那种格式的xml,生成是类似的): xstream.alias("people", People.class);
            xstream.alias("sex", Sex.class);
            xstream.alias("user", User.class);
            People people=(People)xstream.fromXML(response);
      

  3.   

    吧我的代码中的注解去掉,
    把2楼的Java代码加进来,(我就不啰嗦再写了。)
      

  4.   

       xstream.alias("people", People.class);
            xstream.alias("sex", Sex.class);
            xstream.alias("user", User.class);
            People people=(People)xstream.fromXML(response);  如果 这样的话 那需要的xml 应该是这样的吧?
    <people>
    <sex>sex</sex>
    <userList> <user>
    <name>name</name>
    <address>address</address>
    </user>
    <user>
    <name>name</name>
    <address>address</address>
    </user>
    <user>
    <name>name</name>
    <address>address</address>
    </user>
    </userList></people>我现在是由于某种原因不能要<userList>这个节点。不知道 有什么办法没有?
      

  5.   

    1.我那样的dto结构,生成或读取xml的格式和你计划中的是一模一样的,就不带<userList>,你看我的属性中有userList这个属性吗?你为什么不动手试一下呢?
    2.XStream问题基本就是dto结构的问题,至于读取还是生成,都是固定的模式
      

  6.   

    楼主要试试这个
    xs.addImplicitCollection(People.class, "userList");
      

  7.   

    还有这样的一个问题,就是再bean-->xml 的时候,如果两个节点用的是同一个vo,那么生成xml 的时候,第一个节点会有点,当到第二个节点的时候,会出现一个reference 来引用第一个节点,这个要怎么办才能不引用 第一个节点 呢?
      

  8.   

    将第二个节点中引用的vo复制(clone)一份,然后再bean-->xml行不行?
      

  9.   


    这样的话也可以,但问题是 这个VO 有很多,需要 clone 很多份,这样也不太好,有没有这样的一个方法 来对它进行设置呢??
      

  10.   

    试试
    xs.setMode(XStream.NO_REFERENCES);楼主,你很好学嘛。
      

  11.   

    嘿嘿!谢谢! 还是你这个方法好,我找到一个这样的方法 addImmutableType(Class type) 
    这个虽然也能实现,但用起来就得每个都 调用这个方法了 。你很强大!!!
      

  12.   

    我有一个XML文件,在子节点内还有一个同名的 节点名,但意思和父节点不一样,不知该如何处理,详情可以看这里
    http://topic.csdn.net/u/20111231/02/d1f7af41-c56e-42d7-abe3-a02a7fdd6f08.html求助。
      

  13.   

    请问
    <body>
    <themeList totalCount="13">
    <theme id="14">生态旅游</theme>
    这种格式,如何识别
      

  14.   

    totalCount=13 是作为 themeList 的属性。
    所以可以 用xtreamr 的这个useAttributeFor(Class clasz,String field)  方法。
    clasz 对应的应该是themeList 所对应的vo,  field 是他里面的一个属性
    不知道 你说的是不是这个意思?