java 利用Xstream对list中的string起别名

来源:互联网 发布:怎么修改本机端口号 编辑:程序博客网 时间:2024/05/21 15:15

1. [代码]1.实体类:PersonBean     跳至 [1] [2] [3] [4] [5] [6] [7] [8] [9] [全屏预览]

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
importjava.util.List;
 
importcom.thoughtworks.xstream.annotations.XStreamAlias;
importcom.thoughtworks.xstream.annotations.XStreamImplicit;
 
/**
 *@ClassName:PersonBean
 *@author: chenyoulong  Email: chen.youlong@payeco.com
 *@date :2012-9-28 下午3:10:47
 *@Description:TODO
 */
@XStreamAlias("person")
publicclass PersonBean {
    @XStreamAlias("firstName")
    privateString firstName;
    @XStreamAlias("lastName")
    privateString lastName;
     
    @XStreamAlias("telphone")
    privatePhoneNumber tel;
    @XStreamAlias("faxphone")
    privatePhoneNumber fax;
     
    //测试一个标签下有多个同名标签
    @XStreamAlias("friends")
    privateFriends friend;
     
    //测试一个标签下循环对象
    @XStreamAlias("pets")
    privatePets pet;
     
     
    //省略setter和getter
}

2. [代码]2.实体类:PhoneNumber     

?
1
2
3
4
5
6
7
8
9
10
@XStreamAlias("phoneNumber")
    public class PhoneNumber{
        @XStreamAlias("code")
        privateint code;
        @XStreamAlias("number")
        privateString number;
         
            //省略setter和getter
         
    }

实体类:Friends(一个标签下有多个同名标签 )

/**
     * 用Xstream注解的方式实现:一个标签下有多个同名标签
     *@ClassName:Friends
     *@author: chenyoulong  Email: chen.youlong@payeco.com
     *@date :2012-9-28 下午4:32:24
     *@Description:TODO 5个name 中国,美国,俄罗斯,英国,法国
     *http://blog.csdn.net/menhuanxiyou/article/details/5426765
     */
    publicstatic class Friends{
        @XStreamImplicit(itemFieldName="name")  //itemFieldName定义重复字段的名称,
        /*<friends>                               <friends>
            <name>A1</name>                         <String>A1</String>
            <name>A2</name>    如果没有,则会变成    =====>       <String>A1</String>
            <name>A3</name>                         <String>A1</String>
        </friends>                                </friends>
      */
        privateList<String> name;
 
        publicList<String> getName() {
            returnname;
        }
 
        publicvoid setName(List<String> name) {
            this.name = name;
        }
    }

4. [代码]4.1实体类:Animal(同一标签下循环对象实体1)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//测试同一标签下循环某一对象
    public class Animal{
        @XStreamAlias("name")
        privateString name;
        @XStreamAlias("age")
        privateint age;
        publicAnimal(String name,intage){
            this.name=name;
            this.age=age;
        }
         
              //省略setter和getter
    }
    

5. [代码]4.2实体类:Pets(同一标签下循环对象实体2)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
     * 测试同一标签下循环某一对象
     *@ClassName:Pets
     *@author: chenyoulong  Email: chen.youlong@payeco.com
     *@date :2012-9-28 下午6:26:01
     *@Description:TODO
     */
    publicclass Pets{
        @XStreamImplicit(itemFieldName="pet")
        privateList<Animal> animalList;
         
        publicList<Animal> getAnimalList() {
            returnanimalList;
        }
 
        publicvoid setAnimalList(List<Animal> animalList) {
            this.animalList = animalList;
        }
         
    }

6. [代码]5.main函数示例1:toxml     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
importcom.thoughtworks.xstream.XStream;
importcom.thoughtworks.xstream.io.json.JsonWriter.Format;
importcom.thoughtworks.xstream.io.xml.DomDriver;
 
/**
 *@ClassName:PersonTest
 *@author: chenyoulong 
 *@date :2012-9-28 下午3:25:09
 *@Description:TODO
 */
publicclass PersonTest {
 
    /**
     * @Title: main
     * @Description: TODO
     * @param args
     * @return void 
     */
    publicstatic void main(String[] args) {
        // TODO Auto-generated method stub
         
        PersonBean per=newPersonBean();
        per.setFirstName("chen");
        per.setLastName("youlong");
         
        PhoneNumber tel=newPhoneNumber();
        tel.setCode(137280);
        tel.setNumber("137280968");
         
        PhoneNumber fax=newPhoneNumber();
        fax.setCode(20);
        fax.setNumber("020221327");
        per.setTel(tel);
        per.setFax(fax);
         
         
        //测试一个标签下有多个同名标签
        List<String> friendList=newArrayList<String>();
        friendList.add("A1");
        friendList.add("A2");
        friendList.add("A3");
        Friends friend1=newFriends();
        friend1.setName(friendList);
        per.setFriend(friend1);
         
        //测试一个标签下循环对象
        Animal dog=newAnimal("Dolly",2);
        Animal cat=newAnimal("Ketty",2);
        List<Animal> petList=newArrayList<Animal>();
        petList.add(dog);
        petList.add(cat);
        Pets pet=newPets();
        pet.setAnimalList(petList);
        per.setPet(pet);
         
                    //java对象转换成xml
        String xml=XmlUtil.toXml(per);
        System.out.println("xml==="+xml);
         
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
xml===<person>
  <firstName>chen</firstName>
  <lastName>youlong</lastName>
  <telphone>
    <code>137280</code>
    <number>137280968</number>
  </telphone>
  <faxphone>
    <code>20</code>
    <number>020221327</number>
  </faxphone>
  <friends>
    <name>A1</name>
    <name>A2</name>
    <name>A3</name>
  </friends>
  <pets>
    <pet>
      <name>doly</name>
      <age>2</age>
    </pet>
    <pet>
      <name>Ketty</name>
      <age>2</age>
    </pet>
  </pets>
</person>

 

另一种方法
PersonBean 中的
 @XStreamAlias("friends")
    privateFriends friend;

改成
 @XStreamAlias("friends")
    privateList<Strinng> friend;
      java对象转换成xml时加个
xstream.alias("name", String.class);也可以实现
 <friends>
    <name>A1</name>
    <name>A2</name>
    <name>A3</name>
  </friends>
这种效果

0 0