XStream学習ノート

22418 ワード

Xstreamを使用すると、煩雑なxmlとJavaBeanの変換を完了できます.
gradle依存性:
compile 'com.thoughtworks.xstream:xstream:1.4.8'
compile 'dom4j:dom4j:1.6.1'

まず、非常に簡単な例を見てみましょう.例1:
@Test
public void test01(){
    // 1、   XStream   
    XStream xStream = new XStream();
    // 2、    (        ,     alias            )
    xStream.alias("person",Person.class);
    // 3、    
    Person p = new Person("liwei","123456",28,14.19);
    // 4、    xml
    String xml = xStream.toXML(p);
    System.out.println(xml);
}

出力結果:
<person>
  <username>liwei</username>
  <password>123456</password>
  <age>28</age>
  <price>14.19</price>
</person>

例2:
 /** *           */
@Test
public void test02(){
    // 1、   XStream   
    XStream xStream = new XStream();
    // 2、    (        ,     alias            )
    xStream.alias("person",Person.class);
    //     ,       username,    xml         nickname(    )
    xStream.aliasField("nickname",Person.class,"username");
    // 3、    
    Person p = new Person("liwei","123456",28,14.19);
    // 4、    xml
    String xml = xStream.toXML(p);
    System.out.println(xml);
}

出力結果:
<person>
  <nickname>liwei</nickname>
  <password>123456</password>
  <age>28</age>
  <price>14.19</price>
</person>

例3:
/** *             *   password          xml       xml    */
@Test
public void test03(){
    // 1、   XStream   
    XStream xStream = new XStream();
    // 2、    (        ,     alias            )
    xStream.alias("person",Person.class);
    //     ,       username,    xml         nickname(    )
    xStream.aliasField("nickname",Person.class,"username");
    xStream.useAttributeFor(Person.class,"password");
    // 3、    
    Person p = new Person("liwei","123456",28,14.19);
    // 4、    xml
    String xml = xStream.toXML(p);
    System.out.println(xml);
}

出力結果:
<person password="123456">
  <nickname>liwei</nickname>
  <age>28</age>
  <price>14.19</price>
</person>

例4:
@Test
public void test04(){
    XStream xStream = new XStream();
    xStream.alias("person",Person.class);
    xStream.alias("persons",List.class);
    List<Person> personList = new ArrayList<>();
    Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"   "));
    Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"    "));
    Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"    "));
    Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"    "));
    personList.add(p1);
    personList.add(p2);
    personList.add(p3);
    personList.add(p4);
    String xml = xStream.toXML(personList);
    System.out.println(xml);
}

例5:
/** *         ,xml        ,           */
@Test
public void test05(){
    XStream xStream = new XStream();
    xStream.alias("person",Person.class);
    xStream.alias("persons",List.class);
    // xStream.addImplicitCollection(Person.class,"List");
    List<Person> personList = new ArrayList<>();
    Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"   "));
    Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"    "));
    Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"    "));
    Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"    "));
    personList.add(p1);
    personList.add(p2);
    personList.add(p3);
    personList.add(p4);
    String xml = xStream.toXML(personList);
    System.out.println(xml);
}

例6:
@Test
public void test06(){
    XStream xStream = new XStream();
    xStream.alias("group",Group.class);
    xStream.alias("person",Person.class);
    xStream.addImplicitCollection(Group.class,"personList");
    Group group = new Group(1,"   ");
    Person p1 = new Person("liwei","123456",28,14.19,new Group(1,"   "));
    Person p2 = new Person("zhouguang","666666",28,25.26,new Group(2,"    "));
    Person p3 = new Person("huzhenyu","88888",23,16.18,new Group(3,"    "));
    Person p4 = new Person("wudi","9999",25,18.14,new Group(4,"    "));
    group.addPerson(p1);
    group.addPerson(p2);
    group.addPerson(p3);
    group.addPerson(p4);
    String xml = xStream.toXML(group);
    System.out.println(xml);
}

出力結果:
<group>
  <id>1</id>
  <name>   </name>
  <person>
    <username>liwei</username>
    <password>123456</password>
    <age>28</age>
    <price>14.19</price>
    <group>
      <id>1</id>
      <name>   </name>
    </group>
  </person>
  <person>
    <username>zhouguang</username>
    <password>666666</password>
    <age>28</age>
    <price>25.26</price>
    <group>
      <id>2</id>
      <name>    </name>
    </group>
  </person>
  <person>
    <username>huzhenyu</username>
    <password>88888</password>
    <age>23</age>
    <price>16.18</price>
    <group>
      <id>3</id>
      <name>    </name>
    </group>
  </person>
  <person>
    <username>wudi</username>
    <password>9999</password>
    <age>25</age>
    <price>18.14</price>
    <group>
      <id>4</id>
      <name>    </name>
    </group>
  </person>
</group>

例7:
 /** *   XML            */
@Test
public void test07(){
    XStream xStream = new XStream();
    xStream.alias("person",Person.class);
    String xml = "<person><username>liwei</username><password>123456</password></person>";
    Person person = (Person) xStream.fromXML(xml);
    System.out.println(person.getUsername());
    System.out.println(person.getPassword());
}

例8:
@Test
public void test08(){
    XStream xStream = new XStream();
    xStream.alias("persons",List.class);
    xStream.alias("person",Person.class);
    List<Person> personList =
            (List<Person>)xStream.fromXML(XstreamTest.class.getClassLoader().getResourceAsStream("user.xml"));
    for(Person person:personList){
        System.out.println(person);
    }
}

参考資料:http://www.yiibai.com/xstream/xstream_first_application.html