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>
답변의 품질을 향상시키기 위해 설명이나 추가 세부 사항을 추가 할 수 있습니까? – goto
고쿨 감사합니다 !! 그게 내게 많은 도움 :) (y) – Karthikeyan
"197_189"와 같은 밑줄이있는 키가있는 경우 다른 문제가 발생했습니다. 아래에 요소로 추가 할 때 이중 밑줄이 표시됩니다. <197__189>이 문제를 도와 주시겠습니까? 또한 – Karthikeyan