2009-05-21 15 views
20

इस प्रकार मैं एक्सएमएल के लिए एक्सस्ट्रीम इंस्टेंस बना सकता हूं:एक्सस्ट्रीम में सुंदर प्रिंटिंग (व्हाइट स्पेस/न्यूलाइन) को कैसे अक्षम करें?

XStream xstream = new XStream(); 

यह JSON के लिए है:

private final XStream xstream = new XStream(new JsonHierarchicalStreamDriver() { 
     public HierarchicalStreamWriter createWriter(Writer writer) { 
      return new JsonWriter(writer, JsonWriter.DROP_ROOT_MODE); 
     } 
    }); 

दोनों आउटपुट प्रिंटिंग (इंडेंटिंग) हैं।

मैं सुंदर प्रिंटिंग को अक्षम करने के लिए XStream से कैसे पूछ सकता हूं?

+0

किसी के अपने प्रिंट राइटर को परिभाषित करने के लिए कैसे करें। सुंदर प्रिंट लेखक मेरी जरूरतों को पूरा नहीं करता है। मैं प्रत्येक विशेषता और तत्व के बाद नई लाइन चाहता हूं। यह कैसे किया जाएगा? http://stackoverflow.com/questions/8943000/format-xml- जनरेटेड-by-xstream – Mady

उत्तर

11

समुदाय से कुछ मदद के साथ साथ Xstream पर marschal विधि का उपयोग करें, मैं इस सवाल का जवाब खोज निकाला है।

लाइन:

xStream.toXML(o, new OutputStreamWriter(stream, encoding)); 

लाइन बदल

xStream.marshal(o, new CompactWriter(new OutputStreamWriter(stream, encoding))); 

JSON के लिए आप केवल बदलने

एक्सएमएल के लिए आप जिस तरह से आप कैसे को क्रमानुसार बदलना होगा जिस तरह XStream बनाया गया है। तो Xstream का प्रारंभ करने के लिए बदल जाता है:

private final XStream xstreamOut = new XStream(new JsonHierarchicalStreamDriver() { 
    public HierarchicalStreamWriter createWriter(Writer writer) { 
     return new JsonWriter(writer, new char[0], "", JsonWriter.DROP_ROOT_MODE); 
    } 
}); 

ध्यान दें कि 4-पैरामीटर JsonWriter निर्माता प्रयोग किया जाता है।

+0

किसी के अपने प्रिंट राइटर को कैसे परिभाषित करें। सुंदर प्रिंट लेखक मेरी जरूरतों को पूरा नहीं करता है। मैं प्रत्येक विशेषता और तत्व के बाद नई लाइन चाहता हूं। यह कैसे किया जाएगा? – Mady

+0

हम कॉम्पैक्टवाइटर का उपयोग करके प्रोलॉग या स्टाइलशीट कैसे जोड़ सकते हैं? मैं नए लेखक() लिख रहा था। प्रोलॉग और स्टाइलशीट जोड़ने के लिए विधि लिखें, लेकिन कॉम्पैक्टवाइटर में यह फ़ंक्शन नहीं है। – abi1964

4

एक कॉम्पैक्ट लेखक

xstream.marshal(someObject, new CompactWriter(out)); 
+1

"मार्शल" और "toXML" के बीच क्या अंतर है? मैं अब इसका उपयोग करता हूं: xStream.toXML (ओ, नया आउटपुटस्ट्रीमवाइटर (स्ट्रीम, एन्कोडिंग)); – IgorM

+1

स्पष्ट रूप से कॉम्पैक्टवाइटर केवल एक्सएमएल के लिए काम करता है। मैंने अपने आदेश को निम्न में संशोधित कर दिया है और अब मुझे हमेशा एक्सएमएल मिल रहा है, भले ही मुझे JSON की आवश्यकता हो: xStream.marshal (ओ, नया कॉम्पैक्टवाइटर (नया आउटपुटस्ट्रीमवाइटर (स्ट्रीम, एन्कोडिंग)); – IgorM

+0

जावाडॉक देखें - toXML: किसी ऑब्जेक्ट को एक सुंदर-मुद्रित XML स्ट्रिंग पर क्रमबद्ध करें। - मार्शल: सीरियलाइज करें और एक पदानुक्रमित डेटा संरचना (जैसे एक्सएमएल) पर ऑब्जेक्ट करें। तो मार्शल के साथ आपको कुछ आउटपुट विकल्प मिलते हैं। जेएसओएन के लिए ऐसा विकल्प होने के लिए सीम किया गया। – Mork0075

18

धन्यवाद, आपकी पोस्टों में मदद मिली !!! स्ट्रिंग में कनवर्ट करने के लिए मैं यहां उपयोग करता हूं।

String strXML = ""; 
XStream xs = new XStream(); 
StringWriter sw = new StringWriter(); 
xs.marshal(this, new CompactWriter(sw)); 
strXML = sw.toString(); 
1

सुंदर मुद्रण के डिफ़ॉल्ट व्यवहार को विधि AbstractXmlDriver.createWriter() से आता है (Xstream उसके डिफ़ॉल्ट श्रेणीबद्ध धारा चालक के रूप में XppDriver का उपयोग करता है और इस AbstractXmlDriver फैली):

public HierarchicalStreamWriter createWriter(Writer out) { 
    return new PrettyPrintWriter(out, getNameCoder()); 
} 

आप चाहते हैं दुनिया भर में सुंदर प्रिंटिंग अक्षम करें (अन्य सभी डिफ़ॉल्ट व्यवहारों को बनाए रखने के दौरान) और यहां सुझाए गए अन्य उपयोग विकल्पों के साथ गड़बड़ करने के बजाए बस सरल टूएक्सएमएल (ओ) विधि का उपयोग करें, आप निम्नानुसार अपने एक्सस्ट्रीम इंस्टेंस को प्रारंभ कर सकते हैं। यह उपरोक्त विधि को कॉम्पैक्टवाइटर के साथ ओवरराइड करता है।

XStream xstream = new XStream(new XppDriver() { 
    @Override 
    public HierarchicalStreamWriter createWriter(Writer out) { 
     return new CompactWriter(out, getNameCoder()); 
    } 
}); 
संबंधित मुद्दे