2010-07-18 23 views
22

एक्सएमएल को जावा ऑब्जेक्ट्स में कनवर्ट करने का सबसे अच्छा तरीका क्या है?एक्सएमएल को जावा ऑब्जेक्ट्स में कनवर्ट करना

मुझे प्रतिनिधित्व की तरह पसंद नहीं है, लेकिन एक्सएमएल से कुछ डेटा खींचना और जावा ऑब्जेक्ट को पॉप्युलेट करना चाहते हैं। मैंने एक्सस्ट्रीम पर एक नज़र डाली थी, लेकिन वास्तव में पूरी तरह से "हिलना, ऊपर जाना" सामान पसंद नहीं था। मैं वस्तु की तरह एक डोम पसंद करेंगे जब कन्वर्टर्स लेखन ...

+0

Xstream वहाँ ठीक केवल एक चीज है कि मैं नहीं बल्कि HierarchicalStreamReader की JDOM कार्यान्वयन के साथ काम करेगा .... मुझे लगता है कि मैं इसे डाली सकता है दिखता है, लेकिन यह थोड़ा अजीब लगता है .... है कनवर्टर्स का उपयोग करने का एक तरीका लेकिन जेडीओएम रीडर का उपयोग करना? –

उत्तर

11

मैं सभी JAXB और इस तरह की तरह स्वत: समाधान प्यार करता है पता है, लेकिन मैं हाथ-कोडिंग javax.xml.bind.Marshaller और javax.xml.bind.Unmarshaller कार्यान्वयन वास्तव में आप क्या चाहते हैं अनावश्यक रूप से आपके पर्म जनरल अंतरिक्ष को भरने के बिना प्राप्त करने के लिए सलाह देते हैं। XML को पार्स करने के लिए जेडीओएम का उपयोग करें और XPath का उपयोग कर जावा ऑब्जेक्ट्स में मानों को मैप करें। यह एक बार ऐसा करने के लिए कुछ काम होगा, लेकिन आपके पास वही होगा जो आपको चाहिए और कुछ भी नहीं।

+0

आप परमगेन का जिक्र क्यों करते हैं? – Abdull

+3

आपको लगता है कि JAXB द्वारा उत्पन्न क्लास बाइट कोड कहां जाता है? जेडीके 8 के साथ मिल सकता है: कोई और अधिक जीन नहीं। मैंने पांच साल पहले यह जवाब लिखा था। – duffymo

2

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

3

मुझे Simple पसंद है और इसे काम करना बहुत आसान लगता है। यह प्रतिनिधित्व की तरह एक तरह का उत्पादन करता है हालांकि शायद आप जो कुछ भी खोज रहे हैं वह शायद नहीं।

यदि आप एक डोम-जैसे समाधान की तलाश में हैं तो शायद JDom उपयुक्त होगा।

21

यदि आपके पास एक्सएमएल स्कीमा है, तो JAXB अच्छा है - जेडीके के हिस्से के रूप में आता है। उदाहरण के द्वारा जावा कक्षाएं उत्पन्न करें xjc -p foo myschema.xsd

एक XML फ़ाइल पढ़ सकते हैं और एक वस्तु (xjc उपकरण द्वारा उत्पन्न वर्गों से) वापस पाने के लिए:

JAXBContext context = JAXBContext.newInstance(FooObj.class); 
    Unmarshaller unMarshaller = context.createUnmarshaller(); 
    FooObj param = (FooObj) unMarshaller.unmarshal(new FileInputStream("Foo.xml")); 

आप समान कर सकते हैं अगर आप केवल एक XML दस्तावेज के कुछ हिस्सों चाहते एक वस्तु में बदल जाती , आपको उदाहरण चाहिए ऊपर की गई पूरी फ़ाइल के बजाय, एक डोम दस्तावेज़ का JAXB भाग देने में सक्षम हो।

+1

+1 - जावा कक्षाओं से शुरू करते समय आप JAXB (JSR-222) कार्यान्वयन का भी उपयोग कर सकते हैं। आपको केवल एनोटेशन जोड़ने की आवश्यकता है जहां आप चाहते हैं कि XML प्रतिनिधित्व डिफ़ॉल्ट से भिन्न हो: http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html –

3

आप XML से जावा और पीछे के सुविधाजनक रूपांतरण के लिए Castor का उपयोग कर सकते हैं।

केस्टर, आप कर सकते

  1. आसानी रूपांतरण: एक साधारण Marshaller और Unmarshaller जावा के लिए एक्सएमएल के रूपांतरण और वापस बेहद आसान बना देता है।
  2. मैपिंग: XML से जावा और वापस कनवर्ट करने के लिए डेटा की मात्रा को प्रतिबंधित करने के लिए एक मैपिंग फ़ाइल बनाई जा सकती है।
+0

कास्टर मैपिंग फ़ाइलें आसान और सहज हैं : * आप केवल अगर यह XML विशेषता (निर्माता पैरामीटर के रूप में तत्वों समर्थित नहीं हैं) * आप सीधे निजी क्षेत्रों इसलिए यदि आप डोमेन DDD-दृष्टिकोण लागू करनी नहीं लिख सकता है निर्माता पैरामीटर के रूप में पारित कर सकते हैं मूल्य (कोई इसके बजाय सेटर्स और कन्स्ट्रक्टर) और इनपुट एक्सएमएल स्टोर की जानकारी तत्वों के रूप में, कैस्टर –

5

जेएक्सबी ऑब्जेक्ट्स को एक्सएमएल में बदलने का सबसे अच्छा तरीका है, और मोक्सी सबसे अच्छा जेएक्सबी कार्यान्वयन है।

:

  • JAXB is standard, एसई 6
  • JAX-WS, JAX-रुपये, और एससीए
  • सरल क्रम

MOXY निम्नलिखित एक्सटेंशन प्रदान करता है के लिए मानक एक्सएमएल बाध्यकारी प्रौद्योगिकी जावा में शामिल

+0

का उपयोग करने का कोई तरीका नहीं है, मैं एक्सएमएल से ऑब्जेक्ट में दूसरी तरफ जाना चाहता हूं। इसके अलावा मेरा एक्सएमएल दस्तावेज़ बहुत बड़ा है और मैं सिर्फ अपनी वस्तुओं में डेटा के एक छोटे से सबसेट को पार्स करना चाहता हूं। –

+1

जेएक्सबी/मोक्सी एक ऑब्जेक्ट में एक्सएमएल का भी समर्थन करता है। आपको केवल उस सामग्री को मैप करने की आवश्यकता है जिसे आप चाहते हैं अन्य सभी को अनदेखा कर दिया जाएगा। मोक्सी का XPath आधारित मैपिंग आपको एक छोटा ऑब्जेक्ट मॉडल रखने में मदद करता है। Http://bdoughan.blogspot.com/2010/07/xpath-based-mapping.html देखें –

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