개발/JAVA

XStream으로 XML , Object 변환하기

신매력 2012. 9. 20. 15:29

XML을 파싱할 일이 생겼다.


뭐를 쓸까 하다가 튜토리얼이 간단해보이는 XStream 선택.

용도에 맞게 써야된다고 하는데 .. 

아무튼 ㅋㅋ


JAR 를 라이브러리에 추가한 후 사용한다.





오브젝트를 XML로 생성.

XML을 오브젝트로 생성. 하는 예제.. ㄱㄱ






출력하고 싶은 XML의 형태

<persons>
   <person>

       <id>1</id>

       <name>사자</name>

       <age>16</age>

   </person>

   <person>

       <id>2</id>

       <name>고양이</name>

       <age>26</age>

   </person>

</persons> 


굵은글씨 부분은 (루트부터 ~ 맨 안쪽에있는 element 바로 윗단계)

element마다 클래스를 각각 생성한다.


각각 생성된 클래스 안에는 바로 아래 자식 element 필드를 넣는다.  


이것이 규칙이자 핵심임.




- Object


Root Element Object (<persons>)

@Data  // getter, setter
public class PersonList {

   private List<Person> personList;


   public PersonList() {

      personList = new ArrayList<Person>();

   }


   public void add(Person person) {

      personList.add(person);

   }


Child Element Object(<person>)

 @Data  // getter, setter

public class Person {

   private int id;

   private String name;

   private int age;


   public Person(int id, String name, int age) {

      this.id = id;

      this.name = name;

      this.age = age;

   }



변환

public class test {

   public void convertTest() {

      XStream xStream = new XStream();

     

      xStream.alias("person", Person.class);

      xStream.alias("persons", PersonList.class);

     xStream.addImplicitCollection(PersonList.class, "personList"); 


      PersonList p = new PersonList();

      p.add(new Person(1, "사자", 16));

      p.add(new Person(2, "고양이", 26));


      String xml = xStream.toXML(p);  // p 객체를 xml 로 변환


      PersonList personList = (PersonList) xStream.fromXML(xml); // xml을 객체로 변환

   }

}




alias를 붙이지 않으면 Person, PersonList 클래스의 위치가 태그(Element)가 되버리므로

alias로 element의 이름을 설정한다.



* 추가 


List로 싸고 있는 경우, 

xStream.addImplicitCollection(PersonList.class, "personList"); 

라고 alias 부분 뒤에 붙여야한다.


첫번째 파라미터인 PersonList.class는 리스트필드를 가지고 있는 클래스명이며,

두번째 파라미터인 "personList"는 위의 클래스안에 그 리스트의 필드명이다.


이거 몰라가지고 리스트 저장할때 고생했네.. ㅠㅠ




그리고... List<Map> 같은 형태로 저장하는거는 

좀 많이 복잡하다.

방법도 다르고~ 직접구현해야함




출처 : http://blog.naver.com/PostView.nhn?blogId=onestepahead&logNo=130104071723