Aspose.Words Document Object Model (DOM)

يعد Aspose.Words Document Object Model (DOM) تمثيلاً في الذاكرة لمستند Word. يسمح لك Aspose.Words DOM بقراءة محتوى وتنسيق مستند Word ومعالجته وتعديله برمجيًا.

يصف هذا القسم الفئات الرئيسية لـ Aspose.Words DOM وعلاقاتها. باستخدام فئات Aspose.Words DOM، يمكنك الحصول على وصول برمجي إلى عناصر المستند وتنسيقه.

قم بإنشاء شجرة كائنات Document

عند قراءة مستند في Aspose.Words DOM، يتم إنشاء شجرة كائنات وأنواع مختلفة من عناصر المستند المصدر لها كائنات شجرة DOM خاصة بها ذات خصائص مختلفة.

بناء شجرة عقد الوثيقة

عندما يقرأ Aspose.Words مستند Word في الذاكرة، فإنه يقوم بإنشاء كائنات من أنواع مختلفة تمثل عناصر المستند المختلفة. كل تشغيل لنص أو فقرة أو جدول أو قسم هو عقدة، وحتى الوثيقة نفسها هي عقدة. يحدد Aspose.Words فئة لكل نوع عقدة مستند.

تتبع شجرة المستندات في Aspose.Words نمط التصميم المركب:

  • جميع فئات العقد مستمدة في النهاية من فئة Node، وهي الفئة الأساسية في Aspose.Words Document Object Model.
  • العقد التي يمكن أن تحتوي على عقد أخرى، على سبيل المثال، Section أو Paragraph، مشتقة من فئة CompositeNode، والتي بدورها مشتقة من فئة Node.

يوضح الرسم البياني أدناه الوراثة بين فئات العقد في Aspose.Words Document Object Model (DOM). أسماء الفئات المجردة مكتوبة بخط مائل.

aspose-الكلمات-دوم

لنلقي نظرة على مثال. تُظهر الصورة التالية مستند Microsoft Word بأنواع مختلفة من المحتوى.

مستند-مثال-يطرح-كلمات

عند قراءة المستند أعلاه في Aspose.Words DOM، يتم إنشاء شجرة الكائنات، كما هو موضح في المخطط أدناه.

دوم-Aspose-الكلمات

Document، Section، Paragraph، Table، Shape، Run، وجميع علامات الحذف الأخرى في الرسم التخطيطي هي كائنات Aspose.Words تمثل عناصر مستند Word.

احصل على ملف Node من النوع

على الرغم من أن فئة Node كافية لتمييز العقد المختلفة عن بعضها البعض، إلا أن Aspose.Words توفر تعداد NodeType لتبسيط بعض مهام API، مثل تحديد العقد من نوع معين.

يمكن الحصول على نوع كل عقدة باستخدام خاصية NodeType. تقوم هذه الخاصية بإرجاع قيمة تعداد NodeType. على سبيل المثال، تقوم عقدة الفقرة الممثلة بفئة Paragraph بإرجاع NodeType.Paragraph، وترجع عقدة الجدول الممثلة بفئة Table NodeType.Table.

يوضح المثال التالي كيفية الحصول على نوع العقدة باستخدام تعداد NodeType:

التنقل في شجرة المستندات

يمثل Aspose.Words المستند كشجرة عقدة، مما يتيح لك التنقل بين العقد. يصف هذا القسم كيفية استكشاف شجرة المستندات والتنقل فيها في Aspose.Words.

عند فتح نموذج المستند، الذي تم تقديمه سابقًا، في Document Explorer، تظهر شجرة العقدة تمامًا كما تم تمثيلها في Aspose.Words.

مستند داخل مستند مستكشف

علاقات عقدة المستند

العقد الموجودة في الشجرة لها علاقات فيما بينها:

  • العقدة التي تحتوي على عقدة أخرى هي parent.
  • العقدة الموجودة في العقدة الأصلية هي عقد child. الفرعية لنفس الأصل وهي عقد sibling.
  • عقدة root هي دائمًا عقدة Document.

العقد التي يمكن أن تحتوي على عقد أخرى مشتقة من فئة CompositeNode، وجميع العقد مشتقة في النهاية من فئة Node. توفر هاتان الفئتان الأساسيتان طرقًا وخصائص شائعة للتنقل وتعديل بنية الشجرة.

يُظهر الرسم التخطيطي لكائن UML التالي عدة عقد من نموذج المستند وعلاقاتها ببعضها البعض عبر خصائص الأصل والفرع والأخوة:

وثيقة-العقد-العلاقات-تضع الكلمات

المستند هو مالك العقدة

تنتمي العقدة دائمًا إلى مستند معين، حتى لو تم إنشاؤها للتو أو إزالتها من الشجرة، لأنه يتم تخزين الهياكل الحيوية على مستوى المستند مثل الأنماط والقوائم في عقدة Document. على سبيل المثال، ليس من الممكن أن يكون لديك Paragraph بدون Document لأن كل فقرة لها نمط معين يتم تعريفه عالميًا للمستند. يتم استخدام هذه القاعدة عند إنشاء أي عقد جديدة. تتطلب إضافة Paragraph جديد مباشرةً إلى ملف DOM تمرير كائن مستند إلى المُنشئ.

عند إنشاء فقرة جديدة باستخدام DocumentBuilder، يكون لدى المنشئ دائمًا فئة Document مرتبطة بها من خلال خاصية DocumentBuilder.Document.

يوضح مثال التعليمات البرمجية التالي أنه عند إنشاء أي عقدة، يتم دائمًا تحديد المستند الذي سيمتلك العقدة:

عقدة الأم

كل عقدة لها أصل محدد بواسطة خاصية ParentNode. لا تحتوي العقدة على عقدة أصل، أي أن ParentNode تكون فارغة، في الحالات التالية:

  • تم إنشاء العقدة للتو ولم تتم إضافتها إلى الشجرة بعد.
  • تمت إزالة العقدة من الشجرة.
  • هذه هي عقدة Document الجذرية التي تحتوي دائمًا على عقدة أصل فارغة.

يمكنك إزالة عقدة من العقدة الأصلية عن طريق استدعاء طريقة Remove. يوضح مثال التعليمات البرمجية التالي كيفية الوصول إلى العقدة الأصلية:

العقد الطفل

الطريقة الأكثر فعالية للوصول إلى العقد الفرعية لـ CompositeNode هي عبر خصائص FirstChild وLastChild التي تُرجع العقد الفرعية الأولى والأخيرة، على التوالي. في حالة عدم وجود عقد فرعية، تقوم هذه الخصائص بإرجاع null.

يوفر CompositeNode أيضًا طريقة GetChildNodes التي تتيح الوصول المفهرس أو التعدادي إلى العقد الفرعية. خاصية ChildNodes عبارة عن مجموعة مباشرة من العقد، مما يعني أنه كلما تم تغيير المستند، كما هو الحال عند إزالة العقد أو إضافتها، يتم تحديث مجموعة ChildNodes تلقائيًا.

إذا لم يكن للعقدة أي فرع، فإن خاصية ChildNodes ترجع مجموعة فارغة. يمكنك التحقق مما إذا كان CompositeNode يحتوي على أي عقد فرعية باستخدام خاصية HasChildNodes.

يوضح مثال التعليمات البرمجية التالي كيفية تعداد العقد الفرعية المباشرة لـ CompositeNode باستخدام العداد الذي توفره مجموعة ChildNodes:

يوضح مثال التعليمات البرمجية التالي كيفية تعداد العقد الفرعية المباشرة لـ CompositeNode باستخدام الوصول المفهرس:

العقد الأخوة

يمكنك الحصول على العقدة التي تسبق أو تتبع عقدة معينة مباشرة باستخدام خصائص PreviousSibling وNextSibling، على التوالي. إذا كانت العقدة هي الابن الأخير للأصل، فإن خاصية NextSibling هي null. على العكس من ذلك، إذا كانت العقدة هي الابن الأول لأصلها، فإن خاصية PreviousSibling هي null.

يوضح مثال التعليمات البرمجية التالي كيفية زيارة جميع العقد الفرعية المباشرة وغير المباشرة للعقدة المركبة بكفاءة:

الوصول المكتوب إلى العقد التابعة والأصل

لقد ناقشنا حتى الآن الخصائص التي تُرجع أحد الأنواع الأساسية – Node أو CompositeNode. ولكن في بعض الأحيان توجد مواقف قد تحتاج فيها إلى إرسال القيم إلى فئة عقدة معينة، مثل Run أو Paragraph. أي أنه لا يمكنك الابتعاد تمامًا عن عملية الصب عند العمل باستخدام Aspose.Words DOM المركب.

لتقليل الحاجة إلى الإرسال، توفر معظم فئات Aspose.Words خصائص ومجموعات توفر وصولاً مكتوبًا بقوة. هناك ثلاثة أنماط أساسية للوصول المكتوب:

  • تعرض العقدة الأصلية خصائص FirstXXX وLastXXX المكتوبة. على سبيل المثال، يحتوي ملف Document على خصائص FirstSection وLastSection. وبالمثل، يتمتع Table بخصائص مثل FirstRow وLastRow وغيرها.
  • تعرض العقدة الأصلية مجموعة مكتوبة من العقد الفرعية، مثل Document.Sections وBody.Paragraphs وغيرها.
  • توفر العقدة الفرعية وصولاً مكتوبًا إلى العقدة الأصلية، مثل Run.ParentParagraph وParagraph.ParentSection وغيرها.

الخصائص المكتوبة هي مجرد اختصارات مفيدة توفر أحيانًا وصولاً أسهل من الخصائص العامة الموروثة من Node.ParentNode وCompositeNode.FirstChild.

يوضح مثال التعليمات البرمجية التالي كيفية استخدام الخصائص المكتوبة للوصول إلى عقد شجرة المستندات: