XML을 파싱할 일이 생겼다.
뭐를 쓸까 하다가 튜토리얼이 간단해보이는 XStream 선택.
용도에 맞게 써야된다고 하는데 ..
아무튼 ㅋㅋ
JAR 를 라이브러리에 추가한 후 사용한다.
오브젝트를 XML로 생성.
XML을 오브젝트로 생성. 하는 예제.. ㄱㄱ
출력하고 싶은 XML의 형태
<persons> <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 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
'개발 > JAVA' 카테고리의 다른 글
톰캣 실행시 OutOfMemory : permgen space, 톰캣 안켜짐 (1) | 2013.03.07 |
---|---|
도메인 객체에 Serializable 을 implements 하는 이유 (0) | 2013.02.07 |
밀리세컨드 시분초로 변환하기, 소수점 밑에 버림 (0) | 2012.12.18 |
String to Date. 스트링을 Date 타입으로 변환 (0) | 2012.09.25 |
날짜 구하기 (0) | 2012.08.09 |