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توضیح
NodeEnumeratorIEnumerator<Node> / IDocumentPositionListener پیاده‌سازی پشت تکرار for-each; Dispose(), Reset()
DocumentPositionMovementenum شش عضوی که موقعیت نسبی را در حین عبور توصیف می‌کند (None, Inside, StartEnd, Sibling, Above, Below)
CompositeNode.GetEnumerator()مقداردهنده را برای فرزندان مستقیم یک گره برمی‌گرداند

همچنین ببینید:

 فارسی