StAX का उपयोग कर एक XML दस्तावेज़ में छोटे संशोधन

मैं वर्तमान में एक एक्सएमएल फ़ाइल में पढ़ने की कोशिश कर रहा हूं, कुछ मामूली परिवर्तन करें (कुछ विशेषताओं के मूल्य को बदलें), और इसे फिर से लिखें।

मैंने प्रत्येक ईवेंट में पढ़ने के लिए एक स्टैक्स पार्सर ( javax.xml.stream.XMLStreamReader ) का उपयोग करने का इरादा किया है, देखें कि यह एक था जिसे मैं बदलना चाहता था, और फिर इसे सीधे StAX लेखक को पास कर दिया ( javax.xml.stream.XMLStreamReader ) यदि कोई परिवर्तन आवश्यक नहीं है।

दुर्भाग्यवश, यह इतना आसान नहीं लग रहा है - लेखक के पास ईवेंट प्रकार और एक पार्सर ऑब्जेक्ट लेने का कोई तरीका नहीं है, केवल writeAttribute और writeStartElement जैसी विधियां। जाहिर है, मैं एक संभावित दस्तावेज के लिए एक बड़े स्विच स्टेटमेंट लिख सकता हूं जो कि किसी xml दस्तावेज़ में हो सकता है, और इसे फिर से लिखना, लेकिन ऐसा लगता है कि ऐसा कुछ ऐसा लगता है जो इसे सरल होना चाहिए ।

क्या कोई ऐसी चीज है जो मुझे याद आ रही है जो स्टैक्स के साथ पढ़े गए एक बहुत ही समान xml दस्तावेज़ को लिखना आसान बनाता है?

0
ro fr bn

3 उत्तर

लगता है कि चारों ओर घूमने के बाद, उत्तर स्ट्रीम संस्करणों के बजाय इवेंट रीडर/लेखक संस्करणों का उपयोग करना प्रतीत होता है।

(यानी javax.xml.stream.XMLEventReader और javax.xml.stream.XMLEventWriter)

http://www.devx.com/tips/Tip/37795 भी देखें, अंत में मुझे क्या चल रहा है।

0
जोड़ा

StAX बहुत अच्छी तरह से काम करता है और बहुत तेज़ है। मैंने इसे एक्सएमएल फाइलों को पार्स करने के लिए प्रोजेक्ट में इस्तेमाल किया जो कि 20 एमबी तक है। मेरे पास पूरी तरह से विश्लेषण नहीं है, लेकिन यह SAX से निश्चित रूप से तेज़ था।

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

0
जोड़ा

मुझे पता है कि यह पुराना सवाल है, लेकिन अगर कोई और इस तरह की तलाश कर रहा है, तो दूसरा विकल्प है: वुडस्टॉक्स स्टैक्स 2 एक्सटेंशन एपीआई में विधि है:

XMLStreamWriter2.copyEventFromReader(XMLStreamReader2 r, boolean preserveEventData) 

जो स्ट्रीम लेखक का उपयोग कर स्ट्रीम रीडर से वर्तमान में इवेंट-इवेंट की प्रतिलिपि बनाता है। यह केवल सरल लेकिन बहुत ही कुशल नहीं है। मैंने इसे सफलता के साथ समान संशोधनों के लिए उपयोग किया है।

(XMLStreamWriter2 आदि कैसे प्राप्त करें? सभी वुडस्टॉक्स-प्रदत्त उदाहरण इन विस्तारित संस्करणों को लागू करते हैं - साथ ही अगर कोई "मूल" स्टैक्स वेरिएंट का उपयोग करना चाहता है तो रैपर भी हैं)

0
जोड़ा