2015-11-03 6 views
5

मैं Xstream उपयोग कर रहा हूँ और एक वर्ग एक क्षेत्र के साथ निम्नलिखित की तरह:एक्सस्ट्रीम कस्टम कनवर्टर जो सूची से फ्लैट एक्सएमएल संरचना उत्पन्न कर सकता है?

<key1>test data</key1> 
<key2>test data</key2> 
<key3>test data</key3> 

तो मैं मानचित्र कुंजी होना चाहते हैं:

private Map<String, String> data; 

मैं इस तरह XML आउटपुट उत्पन्न करना चाहते हैं तत्व। नक्शा एक्सएमएल मान होने के लिए और मैं नहीं चाहता कि एक्सएमएल <data></data> जैसे तत्व में लपेटा गया हो। क्या कोई नमूना कोड इंगित कर सकता है जो ऐसा करता है, या कुछ समान है?

अद्यतन

यह सिर्फ एक टुकड़ा है, वहाँ एक मूल तत्व है।

अद्यतन 2

कस्टम कनवर्टर कोड मैं नीचे तैनात लगभग काम करता है। मुझे एक फ्लैट संरचना मिलती है, लेकिन मुझे बाहरी तत्व को हटाने की जरूरत है। उस पर कोई विचार?

//this is the result need to remove <data> 
<data> 
    <key1>test data</key1> 
    <key2>test data</key2> 
    <key3>test data</key3> 
</data> 

इस कोड

public class MapToFlatConverter implements Converter{ 
    public MapToFlatConverter() { 
    } 

    @Override 
    public boolean canConvert(Class type) { 
     return Map.class.isAssignableFrom(type); 
    } 

    @Override 
    public void marshal(Object source, HierarchicalStreamWriter writer, MarshallingContext context) { 
     Map<String, String> map = (Map<String, String>) source; 
     for (Map.Entry<String, String> entry : map.entrySet()) { 
      writer.startNode(entry.getKey()); 
      writer.setValue(entry.getValue().toString()); 
      writer.endNode(); 
     } 
    } 

    @Override 
    public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { 
     //not needed at this time 

     return null; 
    } 

}

+1

वैध एक्सएमएल एकाधिक जड़ तत्व नहीं होना चाहिए। – dummy

+0

यह सिर्फ एक स्निपेट है। एक मूल तत्व है। मैं सिर्फ सूची तत्वों को फ्लैट दिखाना चाहता हूं। –

+0

करीबी वोटों के साथ क्या है? ऐसा लगता है कि एसओ के लिए बनाया गया था। –

उत्तर

0

मैं इस काम के प्राप्त करने में सक्षम था। निम्नलिखित SO पोस्ट वह है जो मैंने अंततः किया: custom converter in XStream। मुझे प्रतिबिंब कनवर्टर से विस्तार करने की आवश्यकता है:

इस अगली पोस्ट में भी मदद मिली, हालांकि जब मैंने इस दृष्टिकोण को संदर्भित किया .convertAnother() विधि काम नहीं कर रही थी। इसलिए मैंने पहली पोस्ट में विधि पर स्विच किया।

Xstream Implicit Map As Attributes to Root Element

संबंधित मुद्दे