栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何将XML转换为java.util.Map,反之亦然

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何将XML转换为java.util.Map,反之亦然

XStream!

更新:我按照评论的要求添加了编组部分。

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.Map;public class Test {    public static void main(String[] args) {        Map<String,String> map = new HashMap<String,String>();        map.put("name","chris");        map.put("island","faranga");        XStream magicApi = new XStream();        magicApi.registerConverter(new MapEntryConverter());        magicApi.alias("root", Map.class);        String xml = magicApi.toXML(map);        System.out.println("Result of tweaked XStream toXml()");        System.out.println(xml);        Map<String, String> extractedMap = (Map<String, String>) magicApi.fromXML(xml);        assert extractedMap.get("name").equals("chris");        assert extractedMap.get("island").equals("faranga");    }    public static class MapEntryConverter implements Converter {        public boolean canConvert(Class clazz) { return AbstractMap.class.isAssignableFrom(clazz);        }        public void marshal(Object value, HierarchicalStreamWriter writer, MarshallingContext context) { AbstractMap map = (AbstractMap) value; for (Object obj : map.entrySet()) {     Map.Entry entry = (Map.Entry) obj;     writer.startNode(entry.getKey().toString());     Object val = entry.getValue();     if ( null != val ) {         writer.setValue(val.toString());     }     writer.endNode(); }        }        public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { Map<String, String> map = new HashMap<String, String>(); while(reader.hasMoreChildren()) {     reader.moveDown();     String key = reader.getNodeName(); // nodeName aka element's name     String value = reader.getValue();     map.put(key, value);     reader.moveUp(); } return map;        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/451871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号