Xstream XML -> (Map) XML

황제낙엽 2011.04.29 11:32 조회 수 : 523

이글은 키값과 밸류값을 한 라인을 통합해서 <key>value</key>방식으로 Map을 XML로 변환할 때 적용하는 방법에 대해서 기술합니다.
XML 의 모양을 변환하여 다시 저장합니다

1. MapConverter 재정의
public class CustomMapConverter implements Converter {

private static final Logger LOG = Logger.getLogger(CustomMapConverter.class);

@Override
public boolean canConvert(Class type) {

return type.equals(HashMap.class) || type.equals(Hashtable.class)
|| type.getName().equals("java.util.LinkedHashMap")
|| type.getName().equals("sun.font.AttributeMap");
}

@Override
@SuppressWarnings("unchecked")
public void marshal(Object src, HierarchicalStreamWriter writer, MarshallingContext context) {

Map<String, Object> map = null;

try {
map = (Map<String, Object>) src;
for (Iterator iterator = map.entrySet().iterator(); iterator.hasNext();) {
Map.Entry<String, Object> entry = (Map.Entry<String, Object>) iterator.next();
writer.startNode(entry.getKey().toString());
writer.setValue(entry.getValue().toString());
writer.endNode();
}
} catch (Exception e) {
e.printStackTrace();
LOG.error(e);
}
}

@Override
public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) {

// Map map = (Map) createCollection(context.getRequiredType());
// populateMap(reader, context, map);
Map<String, Object> map = new HashMap<String, Object>();
return map;
}
}

2. 사용 샘플
 - xstream.registerConverter(new CustomMapConverter());

3. 실행 결과
원본 XML
<map>
<entry>
<string>result</string>
<string>0</string>
<string>username</string>
<string>pepsi@paran.com</string>
<string>icon</string>
<string>position=30,30&;name=워드 뷰</string>
</entry>
</map>

변환 결과 XML
<node>
<result>0</result>
<username>pepsi@paran.com</username>
<icon>position=30,30&;name=워드 뷰</icon>
</node>
번호 제목 글쓴이 날짜 조회 수
50 Hello React 황제낙엽 2025.04.04 479
49 Bootstrap Icons 황제낙엽 2024.10.13 611
48 navbars 예제 황제낙엽 2024.07.15 589
47 Chatbot 용 디자인 템플릿 (ChatGPT) file 황제낙엽 2024.01.28 637
46 (Bing) Mustache 의 특징 황제낙엽 2023.12.21 587
45 문자열의 셀렉션 동작 구현 (<p>, <input>) 황제낙엽 2023.10.02 536
44 Bootstrap 5 Gallery Examples & Freebies 황제낙엽 2023.09.26 696
43 Small Business Template (Start Bootstrap) 황제낙엽 2023.09.25 626
42 Card Component 에 background image 출력하기 황제낙엽 2023.09.08 543
41 Bootstrap Gallery 를 상품 전시용으로 활용하기 위한 분석 황제낙엽 2023.09.06 578
40 dom element 에 collapse 적용하기 file 황제낙엽 2023.08.16 562
39 <i> 태그의 아이콘 종류 찾기 (fontawesome, icon) file 황제낙엽 2023.07.09 554
38 Vanilla JS Datepicker 에서 locales 지정 (한국어로 출력) 황제낙엽 2023.06.19 773
37 Feather-icons (svg) 황제낙엽 2023.06.10 532
36 프레임셋처럼 외부페이지를 동적으로 로드하기 (from bing) 황제낙엽 2023.05.24 578
35 Modal 컴포넌트를 스크립트로 감추고 보이기 황제낙엽 2023.05.22 574
34 bootstrap free date-picker 종류 (from bing) 황제낙엽 2023.05.20 566
33 라디오 버튼을 선택 해제하는 샘플 코드 (from bing) 황제낙엽 2023.05.16 558
32 radio group 에서 아이템을 선택한 값 가져오기 황제낙엽 2023.05.15 531
31 부트스트랩(Bootstrap) 테마(Theme), 템플릿(Template) 무료 사이트 file 황제낙엽 2023.04.05 562