2017-01-20 1 views
0

XStream() API를 사용하여지도 객체 (HashMap, LinkedHashMap 및 ConcurrentHashMap)를 xml String으로 변환하려고합니다. 의 LinkedHashMap이나 내 XML에 대해 원하는 루트를받지 오전 ConcurrentHashMap의 변환하면서 반면, convertApi.alias("desired-root",Map.class);XStream()을 사용하여 LinkedHashMap 및 ConcurrentHashMap 객체를 xml로 변환하는 동안 루트 요소를 무시할 수 없습니다.

같은 별칭을 설정하여 내가 원하는 루트 요소와 XML로 내지도를 변환 할 수 오전 HashMap의 변환 오는 동안 "linked-hash-map"또는 "concurrent-hash-map"과 같이 각각 오버라이드됩니다.

연결된 해시 맵 또는 ConcurrentHashMap을 사용하는 동안 원하는 루트를 얻을 수 있도록 도와주세요. 미리 감사드립니다 :)

코드 :

import com.thoughtworks.xstream.XStream; 
import com.thoughtworks.xstream.converters.Converter; 
import com.thoughtworks.xstream.converters.MarshallingContext; 
import com.thoughtworks.xstream.converters.UnmarshallingContext; 
import com.thoughtworks.xstream.io.HierarchicalStreamReader; 
import com.thoughtworks.xstream.io.HierarchicalStreamWriter; 

import java.util.AbstractMap; 
import java.util.HashMap; 
import java.util.LinkedHashMap; 
import java.util.Map; 

public class Mapping { 
    public static void main(String[] args) { 

    Map<String,String> mp=new LinkedHashMap<String, String>(); 

    //Map contains: EmpId,Name 
    mp.put("197","Deepak kumar modi"); 
    mp.put("198","Sweep panorama"); 
    mp.put("199","HD Video"); 
    mp.put("200","My Motorola Mobile"); 
    //System.out.println(mp); 

    XStream magicApi = new XStream(); 
    magicApi.alias("root", Map.class); 
    magicApi.registerConverter(new MapEntryConverter()); 

    String xml = magicApi.toXML(mp); 
    System.out.println("Result of newly formed Xml:"); 
    System.out.println(xml); 

} 

private static class MapEntryConverter implements Converter{ 

    public void marshal(Object value, HierarchicalStreamWriter hierarchicalStreamWriter, MarshallingContext marshallingContext) { 
     AbstractMap map = (AbstractMap) value; 
     for (Object obj : map.entrySet()) { 
      Map.Entry entry = (Map.Entry) obj; 
      hierarchicalStreamWriter.startNode(entry.getKey().toString()); 
      hierarchicalStreamWriter.setValue(entry.getValue().toString()); 
      hierarchicalStreamWriter.endNode(); 
     } 
    } 

    public Object unmarshal(HierarchicalStreamReader hierarchicalStreamReader, UnmarshallingContext unmarshallingContext) { 
     Map<String, String> map = new HashMap<String, String>(); 
     while(hierarchicalStreamReader.hasMoreChildren()) { 
      hierarchicalStreamReader.moveDown(); 
      map.put(hierarchicalStreamReader.getNodeName(), hierarchicalStreamReader.getValue()); 
      hierarchicalStreamReader.moveUp(); 
     } 
     return map; 
    } 

    public boolean canConvert(Class aClass) { 
     return AbstractMap.class.isAssignableFrom(aClass); 
    } 
} 

}

출력 :

Result of newly formed Xml: 
<linked-hash-map> 
    <197>Deepak kumar modi</197> 
    <198>Sweep panorama</198> 
    <199>HD Video</199> 
    <200>My Motorola Mobile</200> 
</linked-hash-map> 

답변

0
XStream magicApi = new XStream(); 
magicApi.alias("root", LinkedHashMap.class); 

이보십시오.

+1

답변의 품질을 향상시키기 위해 설명이나 추가 세부 사항을 추가 할 수 있습니까? – goto

+0

고쿨 감사합니다 !! 그게 내게 많은 도움 :) (y) – Karthikeyan

+0

"197_189"와 같은 밑줄이있는 키가있는 경우 다른 문제가 발생했습니다. 아래에 요소로 추가 할 때 이중 밑줄이 표시됩니다. <197__189>이 문제를 도와 주시겠습니까? 또한 – Karthikeyan

관련 문제