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 <span notrans="<span notrans=" DOM"="">, > після того, як дерево об’єкта побудовано і різні типи елементів вихідних документів, мають власний DOM об’єкти дерева з різними властивостями.

Створити документ Nodes Tree

Коли Aspose.Words читати документ Word на пам’ять, він створює об’єкти різних типів, які представляють різні елементи документа. Кожен запуск тексту, пункту, таблиці або розділу є вершиною, і навіть сам документ є вершиною. Aspose.Words визначає клас для кожного типу вузлів документа.

Дерево документа в Aspose.Words слідувати шаблону Composite Design:

  • Всі класи вершини в кінцевому підсумку зводять з Node клас, який є базовим класом в Aspose.Words Document Object Modelй
  • Ноди, які можуть містити інші вузли, наприклад, Section або Paragraph, від занурення CompositeNode клас, який в свою чергу дервами з Node клас.

Надана нижче схема показує спадкування між класів вузлів Aspose.Words Document Object Model (Українська)DOM). Назви абстрактних класів в Italics.

aspose-words-dom

Давайте подивимося на прикладі. Наступне зображення показує Microsoft Word документ з різними типами контенту.

document-example-aspose-words

При прочитанні вищевказаного документа в Aspose.Words DOM, Дерево об’єктів створюється, як показано на схемі нижче.

dom-aspose-words

Document, Section, Paragraph, Table, Shape, Run, і всі інші еліпси на схемі Aspose.Words об’єкти, що представляють елементи документа Word.

Отримати Node Тип

Хоча Node клас достатньо виділити різні вузли з одного, Aspose.Words забезпечує NodeType занурення для спрощення деяких API завдання, такі як вибір вузлів конкретного типу.

Тип кожного вузла можна отримати за допомогою Node.node_type майно. Ця нерухомість повертається NodeType значення нумерації. Наприклад, вузол абзацу, представлений Paragraph Зворотній зв’язок NodeType.PARAGRAPH, і настільний вузол, представлений Table Зворотній зв’язок NodeType.TABLEй

Наступний приклад показує, як отримати тип вузла за допомогою NodeType заохочення:

Навігація дерева документів

Aspose.Words являє собою документ як дерево вершин, що дозволяє переміщатися між вузлами. Цей розділ описує, як вивчити і навігувати дерево документа в Aspose.Wordsй

Коли ви відкриєте документ про зразок, представлений раніше, в Document Explorer, дерево вершини з’являється точно так, як він представлений в Aspose.Wordsй

document-in-document-explorer

Документ Nodes Відносини

Вузли в дереві мають зв’язки між ними:

  • вузол, що містить інший вузол, є parent.
  • до Вуз, що міститься в материнській вершині, є child. Дитячі вузли одного батька sibling вершини.
  • У root вузол завжди Document вузол.

Вузли, які можуть містити інші вузли, що зводять з CompositeNode клас, і всі вузли, в кінцевому рахунку, від Node клас. Ці два базові класи забезпечують загальні методи та властивості для навігації структури дерева та модифікації.

Наведені нижче діаграми об’єкта УМЛ показує кілька вузлів документа про зразок та їх зв’язків між собою за допомогою батьків, дитини та рухомих властивостей:

document-nodes-relationships-aspose-words

Документ Node Власник

Вузол завжди належить до певного документа, навіть якщо він був просто створений або вилучений з дерева, тому що життєво важливі структури, такі як стилі і списки зберігаються в Document вузол. Наприклад, не можна мати Paragraph без Document Оскільки кожен пункт має присвоєний стиль, який визначається глобально для документа. Це правило використовується при створенні будь-яких нових вузлів. Додати новий Paragraph безпосередньо до DOM вимагає об’єкта документа, що надходить до конструктора.

При створенні нового пункту за допомогою DocumentBuilder, будівельник завжди має Document клас, пов’язаний з ним через DocumentBuilder.document майно.

Приклад коду показує, що при створенні будь-якого вузла документ, який буде володіти вершиною, завжди визначений:

Парент Node

Кожна вершина має батьківщину, вказану parent_node майно. вузол не має материнського вузла, тобто parent_node є None, в наступних випадках:

  • до Вузол був створений і ще не додано до дерева.
  • до Вуз було видалено з дерева.
  • до Це корінь Document вузол, який завжди має материнську вершину None.

Ви можете видалити вузол з свого батька, викликаючи Node.remove метод. Приклад коду показує, як отримати доступ до материнської вершини:

Дитячі Ноди

Найефективніший спосіб доступу дитячих вузлів CompositeNode через first_child і last_child властивості, які повертають перші і останні дочірні вузли, відповідно. Якщо відсутні дочірні вузли, ці властивості повертаються Noneй

CompositeNode також надає get_child_nodes збірка дозволяє індексувати або занурювати доступ до дочірніх вузлів. Про нас get_child_nodes метод повертає живу колекцію вузлів, що означає, що при зміні документа, такі як при видаленні вузлів або додаванні, JavaScript licenses API Веб-сайт Go1.13.8 автоматично оновлюється.

Якщо вузол не має дитини, то JavaScript licenses API Веб-сайт Go1.13.8 метод повертає порожній збір. Ви можете перевірити, чи є CompositeNode містить будь-які дочірні вузли з використанням has_child_nodes майно.

Приклад коду показує, як об’єднати безпосередні дочірні вершини дитини CompositeNode за допомогою анумератора, що надається за рахунок JavaScript licenses API Веб-сайт Go1.13.8 Колекція:

Сіблінг Ноди

Ви можете отримати вершину, який безпосередньо передує або слідувати конкретному вузла за допомогою вузла previous_sibling і next_sibling властивості, відповідно. Якщо вершина остання дитина батька, то next_sibling Готель Noneй Неперевершено, якщо вершина є першою дитиною свого батька, previous_sibling Готель Noneй

Приклад коду показує, як ефективно відвідувати всі прямі та непрямі дочірні вершини композитного вузла:

Виданий доступ до дитини та батьківських Нод

На даний момент ми обговорювали властивості, які повертаються один з типів бази – Node або CompositeNodeй Але іноді виникають ситуації, де потрібно відлити значення до певного класу вершини, такі як Run або Paragraphй Це, ви не можете повністю відмовитися від лиття під час роботи з Aspose.Words DOM, який композитний.

Щоб зменшити потребу у лиття, більшість Aspose.Words класи забезпечують властивості і колекції, які забезпечують високий доступ. Є три основні візерунки типу:

  • Визначається материнська вершина перший_XXX і 18 Річна властивості. Наприклад, Document має first_section і last_section властивості. Аналогічно, Table має властивості, такі як first_row, last_row, та інші.
  • Паризька вершина виводить типову колекцію дочірніх вузлів, таких як Document.sections, Body.paragraphs, та інші.
  • Дитина вершина забезпечує доступ до свого батька, таких як Run.parent_paragraph, Paragraph.parent_section, та інші.

Вимірювані властивості є просто корисними ярликами, які іноді забезпечують легкий доступ, ніж загальні властивості, спадані від Node.parent_node і CompositeNode.first_childй

Приклад коду показує, як використовувати типовані властивості до вузлів доступу до дерева документа: