मुझे जावा ऑब्जेक्ट पदानुक्रम से एक XML दस्तावेज़ बनाने की आवश्यकता है। जावा कक्षाओं और एक्सएमएल प्रारूप दोनों तय कर रहे हैं। तो मैं XStream जैसे एक्सएमएल सीरिएलाइज़र का उपयोग नहीं कर सकता: यह जावा कक्षाओं पर एक्सएमएल प्रारूप का आधार बनाता है। इसी तरह, जावा एक्सएमएल बाध्यकारी तकनीक जैसे JAXB काम नहीं करेगा, क्योंकि यह एक्सएमएल स्कीमा से जावा क्लासेस बनाता है [ed: लेकिन नीचे देखें]। मुझे एक मैनुअल दृष्टिकोण चाहिए।संक्षेप में जावा में एक एक्सएमएल दस्तावेज़ कैसे बनाया जाए?
निम्न तकनीक स्ट्रिंगबिल्डर मार्ग का परिणाम नाजुक और छोटी गाड़ी कोड (कम से कम मेरे लिए!) में होता है।
JAXP या JDOM जैसे एक एपीआई अधिक मजबूत कोड की ओर जाता है, लेकिन ये सुंदर वर्बोज़ हैं।
Groovy एक सुरुचिपूर्ण MarkupBuilder है:
def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.records() {
car(name:'HSV Maloo', make:'Holden', year:2006) {
country('Australia')
record(type:'speed', 'Production Pickup Truck with speed of 271kph')
}
car(name:'P50', make:'Peel', year:1962) {
country('Isle of Man')
record(type:'size', 'Smallest Street-Legal Car at 99cm wide and 59 kg')
}
}
अन्य भाषाओं (। जैसे Ruby), और भी बेहतर लोगों को है, हालांकि मैं शुद्ध जावा के साथ रहना चाहते हैं। जावा के लिए कुछ नए एक्सएमएल बिल्डर्स प्रतीत होते हैं, जैसे practicalxml और जेम्स मूर्ति का xmlbuilder।
जावा में XML दस्तावेज़ बनाने के लिए और अधिक सुरुचिपूर्ण दृष्टिकोण क्या हैं?
सारांश:
जॉन डो dom4j और jdom का सुझाव दिया।
कर्टनडॉग ने जेएक्सबी का उपयोग करने की सिफारिश की है, और जेरिको ने मुझे चिपकाया है कि यह एक महत्वपूर्ण सुझाव था: फिर आप मेरे वर्तमान जावाबीन और जेएक्सबी जावाबीन के बीच मैप करने के लिए डोज़र का उपयोग कर सकते हैं।
थैगी JIBX की सिफारिश करता है और कर्टनडॉग और जेरिको के साथ सहमत है कि बाध्यकारी तकनीक वास्तव में व्यावहारिक हैं।
स्टैक्समैन StaxMate की सिफारिश करता है।
मैंने जो सामान देखा है, व्यावहारिक xml और जेम्स मूर्ति का xmlbuilder सबसे संक्षिप्त बिल्डर्स प्रतीत होता है, हालांकि यह नया है। जेएक्सबी जैसी बाध्यकारी तकनीकें अतिरिक्त सुरक्षा/स्वचालन प्रदान करती हैं। मुख्यधारा के विकल्पों में से, dom4j सभ्य लगता है, हालांकि अभी भी वर्बोज़ का प्रकार है।
public Document createDocument() {
Document document = DocumentHelper.createDocument();
Element root = document.addElement("root");
Element author2 = root.addElement("author")
.addAttribute("name", "Toby")
.addAttribute("location", "Germany")
.addText("Tobias Rademacher");
Element author1 = root.addElement("author")
.addAttribute("name", "James")
.addAttribute("location", "UK")
.addText("James Strachan");
return document;
}
संक्षिप्तता के लिए, आप इस एपीआई के ऊपर एक पतली मुखौटा लपेट संक्षिप्त प्रदान करने के लिए कर सकता है: यह एक "धाराप्रवाह इंटरफ़ेस" (mutators उत्परिवर्तित ऑब्जेक्ट के संदर्भ लौट ताकि वे एक साथ श्रृंखलित जा सकता है), जो मुझे पसंद है प्रदान करता है इन तरीकों में से कुछ के लिए समानार्थी शब्द (उदाहरण के लिए, addAttribute() के बजाय attr())।
धन्यवाद सब!
पीएस .: स्टीफन श्मिट ने जावा MarkupBuilder पर काम किया, हालांकि ऐसा लगता है कि इसे प्रकाशित नहीं किया गया है।
कृपया http://dom4j.sourceforge.net/ पर dom4j लिंक ठीक करें :) –
@PawelVeselov - धन्यवाद, यह दुखद है कि dom4j.org को कैसे मिलाया गया। –
(ओ/टी) @ जिमफेरन्स मुझे नहीं लगता कि इसे कॉपेट किया गया है, वे अब dom4j सॉफ़्टवेयर का उल्लेख नहीं करते हैं। उनके और dom4j लाइब्रेरी पेज के बीच पेज स्टाइल उन लोगों के लिए समान है जो समान छत नहीं रखते हैं :) –