SORU
8 EKİM 2009, PERŞEMBE


Nasıl XML java dönüştürmek için.açıklama.Ve tam tersi göster

Bir dönüştürmek için basit bir API (tercihen tek sınıf) arıyorum

Map<String,String> map = new HashMap<String,String();

xml için bunun tersi de geçerli, bir Harita geri XML dönüştürmek.

örnek:

Map<String,String> map = new HashMap<String,String();
map.put("name","chris");
map.put("island","faranga");

MagicAPI.toXML(map,"root");

sonuç:

<root>
  <name>chris</chris>
  <island>faranga</island>
</root>

geri:

Map<String,String> map = MagicAPI.fromXML("...");

İ JAXB JSON conversion API kullanmak istiyor. İç içe maps veya öznitelikleri veya başka bir şey dikkat çekmek için, sadece basit bir dava değil. Herhangi bir öneriniz var mı?


EditÇalışan bir kopyasını oluşturdum ve örnek yapıştırın. fvu Michal Bernhard için teşekkürler.

Download latest XStream framework, 'çekirdek' yeterlidir. sadece

Map<String,Object> map = new HashMap<String,Object>();
map.put("name","chris");
map.put("island","faranga");

// convert to XML
XStream xStream = new XStream(new DomDriver());
xStream.alias("map", java.util.Map.class);
String xml = xStream.toXML(map);

// from XML, convert back to map
Map<String,Object> map2 = (Map<String,Object>) xStream.fromXML(xml);

Hayır dönüştürücüler ya da başka bir şey gereklidir. Sadece xstream-x.y.z.jar yeterlidir.

CEVAP
8 EKİM 2009, PERŞEMBE


XStream!

Güncellendi: Yorum.. istediğin gibi unmarshal kısmını ben ekledim

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;
        }

    }

}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Creavite

    Creavite

    8 Mart 2009
  • Jared Busch

    Jared Busch

    25 Mayıs 2011
  • PUSHER

    PUSHER

    11 HAZİRAN 2014