Aspose.Words نموذج كائن المستند (DOM)

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

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

إنشاء شجرة كائن المستند

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

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

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

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

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

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

aspose-words-dom-aspose-words-cpp

دعونا ننظر إلى مثال. تعرض الصورة التالية مستندا Microsoft Word يحتوي على أنواع مختلفة من المحتوى.

document-example-aspose-words-cpp

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

document-example-dom-aspose-words-cpp

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

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

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

يمكن الحصول على نوع كل عقدة باستخدام خاصية NodeType. ترجع هذه الخاصية NodeType enumeration value. For example, a paragraph node represented by the Paragraph class returns NodeType.Paragraph، وعقدة جدول ممثلة بـ Table class returns NodeType.Table.

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

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

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

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

document-in-document-explorer-aspose-words-cpp

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

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

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

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

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

document-nodes-relationships-aspose-words-cpp

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

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

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

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

العقدة الأم

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

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

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

العقد الفرعية

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

CompositeNode

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

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

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

عقد الأخوة

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

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

الوصول المكتوب إلى العقد الفرعية والوالدية

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

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

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

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