दिलचस्प पोस्ट
क्या सी / सी ++ में एक मानक साइन फंक्शन (सिग्गम, एसजीएन) है? NullPointerException ऑब्जेक्ट्स का एक अर्रे बनाना क्या एक विशिष्ट पंक्ति को अनदेखा कर सकते हैं? कैसे प्रोग्रामैंक खाली ब्राउजर कैश करने के लिए? पीजी :: कनेक्शनबैड – सर्वर से कनेक्ट नहीं हो सका: कनेक्शन ने इनकार कर दिया Scanf () का उपयोग करते हुए एक लाइन को पढ़ना अच्छा नहीं है? मैं टीएसक्यूएल चयन में प्रत्येक पंक्ति के लिए यादृच्छिक संख्या कैसे प्राप्त करूं? HttpServletRequest JSON POST डेटा प्राप्त करें एंड्रॉइड खंड- एक टुकड़े में विचारों के राज्यों को कैसे बचाया जाए, जब दूसरे टुकड़े को इसके ऊपर धकेल दिया जाता है एक सरणी में अंतिम आइटम प्राप्त करें Emacs 24 पैकेज सिस्टम प्रारंभिक समस्याएं Firebase क्लाउड मेसेजिंग का उपयोग करने के लिए उपकरण को कैसे डिवाइस भेजना है? JSON ऑब्जेक्ट भेज रहा है और पार्सिंग पायथन समय सेकंड: एच: एम: एस मैं jQuery के साथ एक तत्व का चयन कैसे कर सकता हूं?

जावा के लिए सर्वश्रेष्ठ XML पार्सर

मुझे कुछ चीजें पढ़ने की जरूरत है (सबसे अधिक, कुछ यूटीएफ -8 एन्कोडेड में एमटीएम) एक्सएमएल फाइलें, विभिन्न तत्वों और विशेषताओं को देखने के लिए छंटनी, शायद कुछ को संशोधित करें और एक्सएमएल वापस डिस्क पर फिर से लिखें (अधिमानतः अच्छा, इंडेंट स्वरूपण के साथ) ।

मेरी जरूरतों के लिए सर्वश्रेष्ठ XML पार्सर क्या होगा? इसमें से चुनने के लिए बहुत सारे हैं कुछ के बारे में मुझे पता है:

  • JDOM
  • Woodstox
  • XOM
  • dom4j
  • VTD-एक्सएमएल
  • Xerces-जे
  • गहरा लाल

और निश्चित रूप से एक जेडीके में (मैं जावा 6 का उपयोग कर रहा हूं)। मैं ज़ीरस से परिचित हूं लेकिन इसे क्लैन्की मिल गया।

सिफारिशें?

वेब के समाधान से एकत्रित समाधान "जावा के लिए सर्वश्रेष्ठ XML पार्सर"

यदि गति और स्मृति कोई समस्या नहीं है, तो dom4j एक बहुत अच्छा विकल्प है। यदि आपको गति की आवश्यकता है, तो वुडस्टॉक्स जैसी एक स्टाक्स पार्सर का उपयोग सही तरीके से होता है, लेकिन आपको चीजों को पूरा करने के लिए और कोड लिखना होगा और आपको स्ट्रीम में एक्सएमएल प्रोसेस करने के लिए इस्तेमाल करना होगा।

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

असल में एक्सएमएल को एक मानक तरीके से संभालने के तीन तरीके हैं:

  • SAX यह आसान API है आप एक हैंडलर वर्ग को परिभाषित करके एक्सएमएल पढ़ते हैं जो सीरियल तरीके से एक्सएमएल संसाधित होने पर तत्वों / विशेषताओं के अंदर डेटा प्राप्त करता है। यदि आप केवल कुछ विशेषताओं / तत्वों को पढ़ने और / या कुछ मानों को वापस (आपका केस) लिखने की योजना बनाते हैं, तो यह तेज़ और सरल है।
  • डोम यह विधि ऑब्जेक्ट ट्री बनाता है जो आपको बेतरतीब ढंग से संशोधित / एक्सेस करने देता है इसलिए यह जटिल एक्सएमएल हेरफेर और हैंडलिंग के लिए बेहतर है।
  • स्टैक्स एसएक्स और डोम के बीच के रास्ते के मध्य में है। आप बस इसे लिखने के लिए लिखते हैं, जिस पर आपकी दिलचस्पी रखने वाले पार्सर से डेटा खींचने के लिए लिखते हैं।

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

यह कहने की कोई जरूरत नहीं है कि सभी (मैंने सभी की जाँच नहीं की है, लेकिन मुझे यकीन है) पार्सर्स की एक JAXP कार्यान्वयन का अनुपालन करना प्रस्तावित है ताकि तकनीकी तौर पर आप सभी का उपयोग कर सकें, चाहे जो भी हो।

यहां डोम, सैक्स, स्टाएक्स और ट्रेक पर एक अच्छी तुलना है (स्रोत: http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

फ़ील्ड स्टाक्स सैक डोम ट्रेक

एपीआई टाइप पुल, स्ट्रीमिंग पुश, स्ट्रीमिंग मेमोरी ट्री एक्सएसएलटी नियम में

उच्च मध्यम उच्च माध्यम का उपयोग करने में आसानी

XPath क्षमता ना नहीं हाँ हां

सीपीयू और मेमोरी अच्छा अच्छा भिन्न होता है

फॉरवर्ड केवल हां हां नहीं नहीं

एक्सएमएल पढ़ें हाँ हाँ हां

लिखें XML हाँ नहीं हाँ हां

सीआरयूडी नं नहीं हां नहीं

सरल XML http://simple.sourceforge.net/ (डी) धारावाहिक वस्तुओं के लिए बहुत आसान है।

एसएक्स और डोम के अलावा एसएमएफ़स्ट्रीम रीडर का उपयोग करते हुए एसटीएक्स पार्सिंग उपलब्ध है जो एक एक्सएमएल पुल पार्सर है।

मुझे dom4j को XML के साथ काम करने के लिए उपकरण मिल गया है विशेष रूप से एक्सर्स की तुलना में

मैंने यह अनुशंसा नहीं की थी कि आपके पास आपके ऐप में "बहुत सोच" है, लेकिन एक्सएसएलटी का उपयोग जावा के हेरफेर से बेहतर (और एक्सएसएलटी टू बायटेक संकलन के साथ संभावित रूप से तेज) हो सकता है।

यदि आप प्रदर्शन के बारे में कम ध्यान रखते हैं, तो मैं अपाचे डाइजेस्टर का बड़ा प्रशंसक हूं, क्योंकि इससे आप सीधे एक्सएमएल से जावा बीन्स का नक्शा देख सकते हैं।

अन्यथा, आपको पहले पार्स करना होगा, और फिर अपने ऑब्जेक्ट्स का निर्माण करना होगा।