2009-08-28 10 views
8

एक्सएमएल दस्तावेज़ों के साथ काम करने के लिए जावा में सबसे अच्छी कक्षा कौन सा है?जावा में सर्वश्रेष्ठ एक्सएमएल हैंडलिंग क्लास

+1

यह अजीब बात है कि अधिकांश जावा ढांचे एक्सएमएल पर भारी निर्भर हैं लेकिन जावा, भाषा, पाइथन की तुलना में इतना खराब एक्सएमएल समर्थन है, उदाहरण के लिए। –

+3

कृपया "सर्वश्रेष्ठ" को परिभाषित करें। – Bombe

+4

ध्यान दें कि प्रोग्रामिंग भाषा को "जावा" कहा जाता है, और यह एक संक्षिप्त शब्द नहीं है, इसलिए इसे सभी-अपरकेस अक्षरों "जावा" के साथ नहीं लिखा जाना चाहिए। – Jesper

उत्तर

19

यह वास्तव में इस बात पर निर्भर करता है कि आप XML दस्तावेज़ के साथ क्या करना चाहते हैं और दस्तावेज़ कितने बड़े हैं।

मोटे तौर पर, आप XML एपीआई के रूप में वर्गीकृत कर सकते हैं:

  • डोम एपीआई - जो दस्तावेज़ आप संसाधित कर सकते हैं के आकार को सीमित स्मृति में पूरे दस्तावेज, लोड है, लेकिन फिर नेविगेशन के लिए अनुकूलित संरचनाओं बना सकते हैं और परिवर्तन
  • स्ट्रीमिंग एपीआई - आपके आवेदन को निम्न स्तर की पार्स घटनाओं (जैसे तत्व की शुरुआत, तत्व के अंत आदि) की व्याख्या करनी चाहिए, लेकिन आप स्मृति द्वारा सीमित नहीं हैं। दो प्रकार के स्ट्रीमिंग एपीआई हैं - पुश और पुल। आपके द्वारा परिभाषित किसी ऑब्जेक्ट पर पार्स पार्स पार्स पार्स इवेंट्स को पुश करें और उस ऑब्जेक्ट को वर्तमान स्थिति राज्य का ट्रैक रखना चाहिए, उदाहरण के लिए, राज्य मशीन या स्टैक के साथ)। पार्सर्स खींचें अपने ऐप को पार्सर से पार्स घटनाओं को खींचने दें। यह एक्सएमएल सामग्री को संसाधित करने के लिए एक रिकर्सिव वंश पार्सर लिखना आसान बनाता है, लेकिन तब स्टैक आकार उस दस्तावेज़ के आकार पर एक सीमा बन जाता है जिसे आप संसाधित कर सकते हैं।
  • एक्सएमएल मैपर - जावा ऑब्जेक्ट्स को एक्सएमएल सामग्री मानचित्र करें। एक्सएमएल मैपिंग के लिए दो मुख्य दृष्टिकोण हैं: कोड-जेन या प्रतिबिंब। कोड-जेन मैपर एक एक्सएमएल स्कीमा से जावा क्लासेस उत्पन्न करते हैं, जिसका अर्थ है कि आपको जावा कोड में स्कीमा संरचना को डुप्लिकेट करने की आवश्यकता नहीं है, लेकिन इसका नुकसान यह है कि आपका जावा कोड स्कीमा संरचना को बिल्कुल मिरर करता है। इसके अलावा अधिकांश कोड जेनरेटर NOJO कक्षाएं बनाते हैं जो काम करने के लिए अजीब हैं और उनके पास कोई व्यवहार नहीं है। प्रतिबिंबित मैपर आपको समृद्ध व्यवहार के साथ जावा कक्षाएं लिखने देते हैं और फिर परिभाषित करते हैं कि उन्हें एक्सएमएल से कैसे मैप किया गया है। यदि आपको पूर्वनिर्धारित स्कीमा के अनुरूप होना आवश्यक है, तो आपको यह सुनिश्चित करना होगा कि आपकी कक्षाएं और मैपिंग कॉन्फ़िगरेशन सही हैं w.r.t. वह स्कीमा

कुछ विकल्प उपलब्ध हैं:

  • डोम एपीआई: मानक पुस्तकालय में डोम एपीआई रहे हैं मानक (जाहिर है!) और इतने अन्य पुस्तकालयों के साथ interoperate लेकिन वे भयानक हैं। XOM जैसे कई सुविधाजनक डोम-जैसी एपीआई हैं (मेरे पसंदीदा एडम बैटकिन ऊपर दिए गए कारणों के लिए पसंदीदा) या JDOM। कुछ देखें और तय करें कि आप कौन सी एपीआई पसंद करते हैं।
  • स्ट्रीमिंग एपीआई: मानक पुस्तकालय में SAX पुश पार्सर का कार्यान्वयन होता है। जावा के लिए मानक पुल पार्सर StAX है।
  • मैपिंग एपीआई: JAXB एक जेएसआर मानक है लेकिन मैं XStream पसंद करता हूं क्योंकि मै मैप किए गए वर्गों (एनोटेशन या एक्सएमएल कॉन्फ़िगरेशन की आवश्यकता नहीं) से मैपिंग कॉन्फ़िगरेशन को आसानी से अलग कर सकता हूं और यह ऑब्जेक्ट्स को अन्य डेटा स्वरूपों से/से मैप करता है।
+0

+1 के लिए: यह निर्भर करता है "- और यह किस पर निर्भर करता है। –

+0

वीटीडी-एक्सएमएल डोम सैक्स से बेहतर है, और यहां खींचें सबूत है: http://sdiwc.us/digitlib/journal_paper.php?paper=00000582 .pdf –

1

मुझे लगता है कि यह आसानी से उपयोग के लिए JDOM है।

0

पुस्तकालयों जिनकी मदद से आप अलग अलग तरीकों से एक्सएमएल संभाल के बहुत सारे हैं, और कोई एक तरीका "सर्वश्रेष्ठ" है। हमेशा के रूप में, यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं और आपकी आवश्यकताओं क्या हैं।

जब मुझे एक डोम-जैसे पार्सर की आवश्यकता होती है, या XML दस्तावेज़ों के निर्माण के लिए, मुझे व्यक्तिगत रूप से XOM पसंद है क्योंकि यह गारंटी देता है कि XML दस्तावेज़ अच्छी तरह से गठित और "सही" हैं। इसकी संख्या एक प्राथमिकता शुद्धता है, जो अन्य प्रणालियों के साथ अंतःक्रिया करते समय महत्वपूर्ण है, कुछ ऐसा जो एक्सएमएल बहुत अच्छा करता है। इसका एपीआई भी बहुत अच्छी तरह डिज़ाइन और सहज है, जिससे आम परिचालन बहुत आसान हो जाता है।

3

मैं और मैं का उपयोग किया है कुछ भी (विशेष रूप से JDOM, जो मैं एक विशेष रूप से गरीब एपीआई के लिए लगता है) के शीर्ष पर बाहर आने के लिए dom4j पाते हैं। dom4j XPath समर्थन के लिए Jaxen में प्लग करने की अनुमति देता है।

उदाहरण:

SAXReader reader = new SAXReader(); // dom4j SAXReader 
    Document document = reader.read(xmlInputStream); // dom4j Document 

    // select all link nodes with href "http://example.com" 
    List<Element> linkNodes = document.selectNodes("//link[@href='http://example.com']"); 

    // select an attribute value 
    String val = linkNodes.get(0).attributeValue("href"); 

    // select element text and trim it 
    String value = document.elementTextTrim("childNode"); 
1

मैं JAXB साथ भाग्यशाली रहे हैं। यह जावा एसई 6 में शामिल है।

+0

जेएक्सबी एक ओएक्सएम बाइंडिंग समाधान है, न कि सामान्य एक्सएमएल पार्सर। यह एक एक्सएमएल पार्सर का उपयोग करता है, लेकिन यह एक ही नहीं है। – duffymo

+2

हां, लेकिन सवाल सामान्य एक्सएमएल पार्सर के बारे में नहीं था। यह "जावा दस्तावेज़ों के साथ काम करने के लिए जावा में सबसे अच्छी कक्षा कौन सा है?"। और जेएक्सबी निश्चित रूप से विकल्पों में से एक है। –

0

मैं डोम और एसएक्स के क्लासिक संयोजन का उपयोग करना पसंद करता हूं।

0

आपको एक्सएमएल प्रोसेसिंग के लिए दो अलग-अलग दृष्टिकोणों के बीच फैसला करना होगा: DOM और SAX दोनों फायदे और नुकसान के साथ हैं। यह सब आपकी आवश्यकताओं और उस XML दस्तावेज़ के आकार पर निर्भर करता है जिसे आप संसाधित करना चाहते हैं। पहले से ही उल्लिखित JAXB दोनों के ऊपर एक एपीआई बनाता है और जावा 6 के साथ भेज दिया जाता है।

जब आप उपर्युक्त समझते हैं, तो आप अपने प्रश्न को ठोस बनाना चाहते हैं और शायद सर्वश्रेष्ठ डॉम या सर्वोत्तम SAX कार्यान्वयन के लिए पूछ सकते हैं। इसके अलावा, यह अच्छा होगा अगर आप यह बता सकें कि आपकी आवश्यकताएं क्या हैं। क्या आप एक्सएमएल लिखना या पढ़ना चाहते हैं? फाइलें कितनी बड़ी होंगी? और इसी तरह।

संपादित करें:

Nat के रूप में बताया, वहाँ भी है StAX एक तिहाई वैकल्पिक अवधारणा के रूप में।

+0

स्टैक्स भी है, जो एसएएक्स की तरह कम-स्तर वाला है लेकिन क्लाइंट कोड को पार्सर से धक्का देने वाली घटनाओं को संभालने के बजाय एक्सएमएल ईवेंट को स्ट्रीम से खींचने देता है। यह एक्सएमएल सामग्री को संसाधित करने के लिए रिकर्सिव वंश पार्सर्स लिखना आसान बनाता है। – Nat

+0

@Nat: कभी भी इसका इस्तेमाल नहीं किया, टिप के लिए धन्यवाद! बस मेरा जवाब संपादित किया और एक लिंक शामिल किया। –

0

यदि आप केवल पढ़ रहे हैं, तो XPath एक अच्छी शर्त है। अन्यथा, डीओएम (org.w3c.dom पैकेज में) आपकी सबसे अच्छी शर्त है।

+0

"सर्वश्रेष्ठ" को समझने और कोड के लिए सबसे आसान परिभाषित नहीं किया गया है। और मैं org.w3c.dom में इंटरफेस देखता हूं, इसलिए आपको अभी भी किसी प्रकार के कार्यान्वयन की आवश्यकता है। – duffymo

0

जावा के लिए XML का अच्छा समर्थन है। एक अर्थ में समस्या यह है कि बहुत सारे विकल्प हैं। तो, जावा में एक्सएमएल को संभालने का "तरीका" तरीका कोई भी समाधान नहीं है। आपको समस्या के आधार पर अपने टूल्स चुनना होगा।

कहें कि आपके पास जटिल प्रमाणीकृत दस्तावेज़ हैं जिन्हें आप किसी ऑब्जेक्ट पेड़ में लोड करना चाहते हैं जिसे आप पेड़ पर क्वेरी और हेरफेर कर सकते हैं। आप इसके लिए एक डोम पार्सर चाहते हैं, और वहां से चुनने के लिए एक संख्या है। यह पूरे दस्तावेज़ को ऑब्जेक्ट्स में परिवर्तित करता है, जो सीपीयू के मामले में महंगा हो सकता है।

कहें कि आपके पास एक दस्तावेज़ है जहां आप कुछ तत्वों का चयन करना चाहते हैं, और प्रदर्शन एक मुद्दा है। एक सैक्स पार्सर, पुल पार्सर, या XPath आज़माएं।

शायद आपको तार पर मार्शल/अनमर्शल ऑब्जेक्ट्स की आवश्यकता है। जेएक्सबी इस के लिए एक उम्मीदवार है, जैसा कि अन्य विकल्प हैं।

तो, आपके प्रश्न का कोई भी सही जवाब नहीं है। किसी भी [प्रोग्रामिंग] समस्या के साथ, आपको समस्या को देखना होगा, विकल्पों का मूल्यांकन करना होगा, और नौकरी के लिए सबसे अच्छा टूल चुनना होगा।

0

जब भी मुझे XML दस्तावेज़ों के साथ काम करने की ज़रूरत होती है तो मैंने हमेशा पहले रिज़ॉर्ट के रूप में dom4j/sax के बारे में सोचा, और यह मुझे कभी भी नीचे जाने देता है। ;)

आपको SAXReader में देखना चाहिए।

0

@Epaga, यदि आप संदर्भ में "सर्वश्रेष्ठ" नहीं डालते हैं, तो आप बुरी तरह विफल हो जाएंगे।

उदाहरण के लिए, संरचना जैसे डीओएम में एक विशाल एक्सएमएल लोड करने का प्रयास बहुत बेवकूफ होगा। आपको बुद्धिमानी से टूल का चयन करना होगा।

0

एक्सओएम (http://www.xom.nu) एक साधारण, लचीला एक्सएमएल टूलकिट है जिसे मैंने कई अन्य पार्सर्स की तुलना में उपयोग करने में आसान और आसान पाया है। मानक डब्ल्यू 3 सी-आधारित उपकरणों से स्विच करने के बाद से मेरी उत्पादकता में काफी वृद्धि हुई है। अपने वेब पृष्ठों में लेखक इलियटेट रस्टी हैरोल्ड बताते हैं कि क्यों एक्सओएम का डिज़ाइन एक्सएमएल डोम के लिए उपयुक्त मॉडल है।

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