मुझे XML दस्तावेज़ों को संसाधित करने की आवश्यकता है जिनमें बहुत से स्वतंत्र रिकॉर्ड शामिल हैं, उदा।एक बड़े एक्सएमएल दस्तावेज़ से स्ट्रीमिंग इटरेटर [नोड] कैसे प्राप्त करें?
<employees>
<employee>
<firstName>Kermit</firstName>
<lastName>Frog</lastName>
<role>Singer</role>
</employee>
<employee>
<firstName>Oscar</firstName>
<lastName>Grouch</lastName>
<role>Garbageman</role>
</employee>
...
</employees>
कुछ मामलों में ये केवल बड़ी फ़ाइलें हैं, लेकिन अन्य में वे स्ट्रीमिंग स्रोत से आ सकते हैं।
मैं सिर्फ scala.xml.XmlLoader.load() नहीं कर सकता क्योंकि यह पूरे दस्तावेज़ को मेमोरी में नहीं रखना चाहता (या इनपुट स्ट्रीम को बंद करने के लिए प्रतीक्षा करें), जब मुझे केवल काम करने की ज़रूरत है एक समय में एक रिकॉर्ड। मुझे पता है कि मैं XmlEventReader का उपयोग XmlEvents के अनुक्रम के रूप में इनपुट स्ट्रीम करने के लिए कर सकता हूं। हालांकि scala.xml.Node से काम करने के लिए ये बहुत कम सुविधाजनक हैं।
तो मैं एक आलसी इटरेटर [नोड] जबकि नियंत्रण में स्मृति उपयोग रखते हुए, किसी भी तरह इस से बाहर निकलने के क्रम में, सुविधाजनक स्काला सिंटैक्स का उपयोग प्रत्येक व्यक्ति के रिकॉर्ड पर संचालित करने के लिए करना चाहते हैं।
यह करने के लिए, मैं एक एक्सएमएलईवेंट रीडर के साथ शुरू कर सकता हूं, प्रत्येक मिलान शुरू करने और अंत टैग के बीच घटनाओं का एक बफर तैयार कर सकता हूं, और उसके बाद से नोड पेड़ का निर्माण कर सकता हूं। लेकिन, क्या कोई आसान तरीका है जिसे मैंने अनदेखा कर दिया है? किसी भी अंतर्दृष्टि के लिए धन्यवाद!
शानदार! यह बहुत अच्छा काम करता है। इस जनरेटर-स्टाइल चीज़ से इटरेटर तक पहुंचने के लिए बहुत मुश्किल नहीं है; मेरा दूसरा जवाब देखें। बहुत धन्यवाद! –