Navigation
Navigation
Aspose.Words FOSS برای .NET شامل یک کوچک Nodes.Navigation فضای نام برای تکرار و موقعیتیابی در درخت گرههای یک سند: NodeEnumerator، نوع شمارندهای که پشت تکرار به-صورت for-each بر روی گرههای فرزند قرار دارد، و DocumentPositionMovement، یک شمارش که توصیف میکند موقعیت یک گره نسبت به گره دیگر در طول عبور چگونه است. این متفاوت از APIهای دستکاری درخت (درج، حذف و بازآرایی گرهها) است که در Nodes صفحه — این صفحه به حرکت درون و مقایسه موقعیتها در درختی که از پیش وجود دارد میپردازد.
تکرار گرههای فرزند
هر CompositeNode (کلاس پایه برای گرههای محفظهای مانند Document، Section، Body و Paragraph) از تکرار به-صورت for-each روی فرزندان مستقیم خود از طریق GetEnumerator() پشتیبانی میکند، که — طبق مستندات آن — پشتیبانی از تکرار به-صورت for-each روی گرههای فرزند یک گره را فراهم میسازد. شمارنده بازگرداندهشده پیادهسازی IEnumerator<Node> را دارد؛ در این سطح API، این نقش توسط NodeEnumerator ایفا میشود، که همچنین IDocumentPositionListener را پیادهسازی میکند تا بتواند تغییرات موقعیت را در حالی که درخت زیرین در حال شمارش است، ردیابی کند. NodeEnumerator اعضای استاندارد Dispose() و Reset() را همراه با قرارداد IEnumerator<Node> در دسترس قرار میدهد.
جابهجایی موقعیت سند
DocumentPositionMovement یک شمارش با شش عضو — None، Inside، StartEnd، Sibling، Above و Below — است که نشان میدهد یک موقعیت در سند چگونه نسبت به موقعیت دیگر هنگام پیمایش درخت ارتباط دارد: چه ثابت بماند، به داخل یک گره منتقل شود، به مرز شروع/پایان منتقل شود، به یک خواهر/برادر منتقل شود، یا بالای یا پایین موقعیت مرجع منتقل شود. این شمارش همراه با NodeEnumerator در همان ناحیه Nodes.Navigation سطح API تعریف شده است و نقش آن را در ردیابی تغییرات موقعیت هنگام شمارش نشان میدهد.
نکات و بهترین شیوهها
- از یک C#
foreachاستاندارد بر روی هرCompositeNodeاستفاده کنید (یا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 را بهطور مستقیم استفاده کنم؟
معمولاً نه — C# foreach استاندارد بر روی یک CompositeNode آن را بهصورت ضمنی از طریق GetEnumerator() استفاده میکند. فقط زمانی که به کنترل صریح بر Dispose()/Reset() نیاز دارید، آن را بهطور مستقیم بکار بگیرید.
DocumentPositionMovement چه چیزی را توصیف میکند؟
روابط بین دو موقعیت در درخت سند هنگام ناوبری — None, Inside, StartEnd, Sibling, Above یا Below.
این چطور با APIهای دستکاری درخت در صفحه Nodes متفاوت است؟
این Nodes این صفحه شامل درج، حذف، کلونکردن و بازسازماندهی گرههاست. این صفحه مرور فقط-خواندنی و موقعیتیابی درون درختی که از پیش وجود دارد را پوشش میدهد.
API Reference خلاصه
| کلاس / Enum | توضیح |
|---|---|
NodeEnumerator | IEnumerator<Node> / IDocumentPositionListener پیادهسازی پشت تکرار for-each; Dispose(), Reset() |
DocumentPositionMovement | enum شش عضوی که موقعیت نسبی را در حین عبور توصیف میکند (None, Inside, StartEnd, Sibling, Above, Below) |
CompositeNode.GetEnumerator() | مقداردهنده را برای فرزندان مستقیم یک گره برمیگرداند |