2016-05-03 15 views
0

XMLを使用してHashMapを初期化する方法はありますか?私はこれを持っているとしましょうdata.xmlXMLを使用してHashMapを初期化する

<company> 
    <employee id=1> 
    <name>Joe</name> 
    </employee> 
    <employee id=2> 
    <name>Mark</name> 
    </employee> 
    <employee id=3> 
    <name>Bill</name> 
    </employee> 
</company> 

従業員のIDと名前をマップしたいと思います。

+0

をたどることができますしてください?これは既にjavaに組み込まれています。 http://docs.oracle.com/javase/7/docs/api/javax/xml/parsers/DocumentBuilder.htmlおよびDocumentBuilderFactoryを参照してください。 – ControlAltDel

答えて

1

は、あなたがどのように文書について、その代わりにHashMapの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; 
     } 

    } 

} 
関連する問題