Navigation
Navigation
Aspose.Words FOSS for .NET में एक छोटा शामिल है Nodes.Navigation दस्तावेज़ के नोड ट्री के भीतर इटरेट करने और स्थिति निर्धारित करने के लिए एक namespace: NodeEnumerator, चाइल्ड नोड्स पर for-each शैली इटरेशन के पीछे का enumerator प्रकार, और DocumentPositionMovement, एक enumeration जो ट्रैवर्सल के दौरान एक नोड की स्थिति दूसरे नोड से कैसे संबंधित है, इसका वर्णन करता है। यह ट्री-मैनीपुलेशन APIs (इन्सर्टिंग, रिमूविंग, और रीऑर्गनाइज़िंग नोड्स) से अलग है जो कवर किए गए हैं the Nodes पेज — यह पेज पहले से मौजूद ट्री में स्थितियों को आगे बढ़ाने और तुलना करने को कवर करता है।
चाइल्ड नोड्स का इटरेशन
कोई भी CompositeNode (कंटेनर नोड्स जैसे Document, Section, Body, और Paragraph के लिए बेस क्लास) अपने तत्काल बच्चों पर GetEnumerator() के माध्यम से for-each शैली के इटरेशन का समर्थन करता है, जो — अपने दस्तावेज़ के अनुसार — नोड के चाइल्ड नोड्स पर for-each शैली के इटरेशन को सपोर्ट करता है। लौटाया गया एनेमरेटर IEnumerator<Node> को इम्प्लीमेंट करता है; इस API सतह में, यह भूमिका NodeEnumerator द्वारा पूरी की जाती है, जो IDocumentPositionListener को भी इम्प्लीमेंट करता है ताकि मूल ट्री के इनेमरेशन के दौरान पोजिशन परिवर्तन को ट्रैक कर सके। NodeEnumerator मानक Dispose() और Reset() मेम्बर्स को IEnumerator<Node> कॉन्ट्रैक्ट के साथ उजागर करता है।
दस्तावेज़ स्थिति का आंदोलन
DocumentPositionMovement एक एनेमरेशन है जिसमें छह सदस्य हैं — None, Inside, StartEnd, Sibling, Above, और Below — जो यह दर्शाते हैं कि दस्तावेज़ में एक स्थिति दूसरी से कैसे संबंधित है जब ट्री नेविगेट किया जाता है: चाहे वह अपरिवर्तित रहे, नोड के अंदर ले जाया गया हो, शुरू/समाप्ति सीमा पर ले जाया गया हो, किसी भाई/बहन पर ले जाया गया हो, या संदर्भ स्थिति के ऊपर या नीचे ले जाया गया हो। यह NodeEnumerator के साथ उसी Nodes.Navigation क्षेत्र में API सतह पर परिभाषित है, जो एनेमरेशन के दौरान स्थिति परिवर्तन को ट्रैक करने में इसकी भूमिका को दर्शाता है।
टिप्स और सर्वोत्तम प्रथाएँ
- किसी भी
CompositeNodeपर एक मानक C#foreachका उपयोग करें (या सीधेGetEnumerator()को कॉल करें) ताकि नोड के तत्काल बच्चों को चलाया जा सके — एनुमरेटर आपके लिएIEnumerator<Node>अनुबंध को संभालता है। - क्योंकि
NodeEnumeratorभीIDocumentPositionListenerको लागू करता है, ट्री में संरचनात्मक संपादनों के दौरान एनुमरेटर को कैश करने से बचें; यदि आप जिस नोड संग्रह पर इटररेट कर रहे हैं वह बदल गया है तो इसेGetEnumerator()के माध्यम से पुनः प्राप्त करें। - गहन ट्री वॉक्स (केवल तत्काल बच्चों के लिए नहीं) के लिए,
Node.NextPreOrder(rootNode)/PreviousPreOrder(rootNode)का उपयोग करें, याGetChildNodes(nodeType, isDeep)कोisDeepकोtrueपर सेट करके, बजाय कि एनुमरेटर्स को मैन्युअल रूप से नेस्ट किया जाए।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
| नोड के बच्चों को क्रमबद्ध करते हुए उन्हें संशोधित करने से अपवाद फेंकता है या नोड्स को छोड़ देता है | सूचीकरण के दौरान ट्री की संरचना बदल गई थी | पहले नोड्स को एक एरे में इकट्ठा करें (उदाहरण के लिए NodeCollection.ToArray() के साथ), फिर एरे को इटररेट करें जबकि ट्री को संशोधित किया जा रहा है |
| यह स्पष्ट नहीं है कि स्थानांतरित स्थिति मूल स्थिति से कैसे संबंधित है | DocumentPositionMovement मानों की जांच नहीं की गई थी | किसी विशिष्ट संबंध मानने के बजाय रिपोर्ट किए गए DocumentPositionMovement (Inside, StartEnd, Sibling, Above, Below, या None) की जाँच करें |
FAQ
क्या मुझे NodeEnumerator को सीधे उपयोग करने की आवश्यकता है?
आमतौर पर नहीं — एक CompositeNode पर मानक C# foreach इसे GetEnumerator() के माध्यम से अप्रत्यक्ष रूप से उपयोग करता है। केवल तब इसे सीधे उपयोग करें जब आपको Dispose()/Reset() पर स्पष्ट नियंत्रण की आवश्यकता हो।
DocumentPositionMovement क्या वर्णन करता है?
दस्तावेज़ ट्री में नेविगेशन के दौरान दो स्थितियों के बीच का संबंध — None, Inside, StartEnd, Sibling, Above, या Below।
यह Nodes पेज पर ट्री-मैनीपुलेशन API से कैसे अलग है?
यह Nodes पेज में नोड्स को डालने, हटाने, क्लोन करने और पुनः व्यवस्थित करने के बारे में बताया गया है। यह पेज मौजूदा ट्री में केवल-रीड ट्रैवर्सल और पोजिशनिंग को कवर करता है।
API Reference सारांश
| क्लास / एनम | विवरण |
|---|---|
NodeEnumerator | IEnumerator<Node> / IDocumentPositionListener for-each इटरेशन के पीछे कार्यान्वयन; Dispose(), Reset() |
DocumentPositionMovement | ट्रैवर्सल के दौरान सापेक्ष स्थिति का वर्णन करने वाला छह-सदस्यीय enum (None, Inside, StartEnd, Sibling, Above, Below) |
CompositeNode.GetEnumerator() | नोड के तत्काल बच्चों के लिए enumerator लौटाता है |