2012-10-28 8 views
5

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

+0

मुझे कुछ अनुप्रदेश की केवल शाखा प्राप्त करने के लिए बिल्कुल सिमिलर की आवश्यकता होगी। हालांकि यह डोम पार्सर –

उत्तर

3
  1. नहीं, आप पहले इसे पार्स किए बिना किसी XML दस्तावेज़ के उप-पेड़ को छोड़ नहीं सकते हैं। यह हर पार्सर के लिए सच है, सिर्फ स्टैक्स नहीं। (को जानने का जो बिंदु का तात्पर्य है कि आप पहले से ही बीच में तत्वों पार्स किया है छोड़ने के लिए।)

  2. हालांकि एक नेस्टिंग स्तर काउंटर है कि आप हर प्रारंभिक तत्व घटना और हर अंत तत्व घटना के साथ घटती साथ बढ़ा देते बनाए रखने के द्वारा, अपने लक्ष्य स्तर से नीचे के स्तर से आने वाली सभी घटनाओं को अनदेखा करना आसान है।

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

सब कुछ, आपका उपयोग केस StAX के लिए एक अच्छा फिट नहीं दिखता है। क्या आपने VTD-XML की कोशिश की है? आपकी फ़ाइल कितनी बड़ी है, इस पर निर्भर करता है कि यह वही हो सकता है जो आप चाहते हैं।

+0

के माध्यम से किया जा सकता है आपके विस्तृत उत्तर के लिए धन्यवाद! मेरे पास कुछ प्रश्न हैं हालांकि: 1) क्या मैं उप-पेड़ को पार्स किए बिना अगले माता-पिता (भाई) की खोज कर सकता हूं, लेकिन इसे पढ़ रहा हूं - पूर्ण पार्सिंग नहीं कर रहा हूं? या उप-पेड़ पर जा रहे हैं = इसे पार्सिंग? 2) मुझे यकीन नहीं है कि मुझे यादृच्छिक पहुंच की आवश्यकता है या नहीं। मैं हर बार एक विशिष्ट स्तर दिखाना चाहता हूं। नोड पर क्लिक करते समय - अपने पहले स्तर के बच्चों को दिखाने के लिए। यादृच्छिक अभिगम यहां आवश्यक है? क्या मुझे इसके लिए एक्स-पथ चाहिए? और यदि मैं करता हूं - क्या मैं इसे एसटीएक्स के साथ जोड़ सकता हूं? या मैं बेहतर अन्य पार्सर्स की तलाश करता हूं? 3) क्या वीजीडी-एक्सएमएल 1 जीबी की फाइलों के लिए अच्छा है? यही कारण है कि मुझे मिल गया है ... – user1579191

+0

1. हां, मुझे पार्सिंग के रूप में एक उप-उपरोक्त पर जाने पर विचार किया जाता है। बेशक आपको इन नोड्स के बारे में कुछ भी रिकॉर्ड करने की आवश्यकता नहीं है (गहराई से काउंटर के अलावा, जो एक वैश्विक 'int' है)। 2. यह प्रभावी ढंग से यादृच्छिक पहुंच है, क्योंकि जब भी कोई उपयोगकर्ता नोड पर क्लिक करता है, तो आपको किसी दूसरे स्थान से प्रोसेस करना प्रारंभ करना होगा। 3. जहां तक ​​मैं कह सकता हूं, हां। लेकिन मैं उस परियोजना से शामिल नहीं हूं और मैंने कभी भी उन फ़ाइलों पर इसका उपयोग करने की कोशिश नहीं की। – biziclop

+0

धन्यवाद! आखिरी सवाल (मुझे उम्मीद है ...): मैं जानना चाहता हूं कि मैं अच्छी तरह से समझ गया हूं: स्टैक्स में - प्रत्येक बार जब मैं नोड पर क्लिक करता हूं तो सभी डेटा को पार्स करने में काफी समय लगेगा, लेकिन दूसरी तरफ यह ' टी बहुत मेमोरी का उपयोग नहीं करता है (यह किसी भी डेटा को सहेजता नहीं है? जिसका अर्थ यह है कि इससे कोई फर्क नहीं पड़ता कि मैं एक छोटी फाइल या एक बड़ा पार्स करता हूं?)। वीटीडी-एक्सएमएल पर - यह बहुत सारी मेमोरी का उपयोग करता है (कम से कम मेरे मामले में यह बहुत है) - लेकिन फिर पहले नोड पर क्लिक करते समय यह धीमा हो जाएगा (जब यह पहली और एकमात्र समय के लिए पार्सिंग करता है?) - और बाद में बहुत तेज होगा। सही? फिर से धन्यवाद, तुमने वास्तव में मेरी मदद की! – user1579191

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