Aspose.Words Document Object Model (DOM)
На Aspose.Words Document Object Model (DOM) е в памет представяне на документ Word. На Aspose.Words DOM ви позволява да програмно четене, манипулация и промяна на съдържанието и форматиране на Word документ.
Този раздел описва основните класове на Aspose.Words DOM и техните връзки. С помощта на Aspose.Words DOM класове, можете да получите програмен достъп до документи елементи и форматиране.
Създаване на документ Дърво на обекта
Когато документ се чете в Aspose.Words <span notrans="<span notrans=" DOM"="">,"> тогава е построен обект дърво и различни видове елементи на изходния документ имат своя собствена DOM дървесни предмети с различни свойства.
Построяване на дърво с възли
Кога 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). Имената на абстрактните класове са в Италия.
Node
Клас.
Нека да разгледаме един пример. Следното изображение показва a Microsoft Word документ с различни видове съдържание.
При четене на горния документ в Aspose.Words DOM, дървото на обектите е създадено, както е показано в схемата по-долу.
Document, Section, Paragraph, Table, Shape, Run, и всички други елипси на диаграмата са Aspose.Words обекти, които представляват елементи от документа на Word.
Вземи Node
Тип
Въпреки че Node Класът е достатъчен, за да различава различни възли един от друг, Aspose.Words осигурява NodeType изброяване за опростяване на някои API задачи, като например избор на възли от определен тип.
Видът на всеки възел може да бъде получен с помощта на NodeType собственост. Този имот връща a NodeType стойност на изброяването. Например, параграф възел, представен от Paragraph Връщане на класа NodeType.Paragraph, и възел на масата, представен от Table Връщане на класа NodeType.Table.
Следният пример показва как да получите тип възел с помощта на NodeType Изброяване:
Навигация на дървото на документа
Aspose.Words представлява документ като дърво на възел, който ви позволява да се движите между възлите. Този раздел описва как да изследвате и навигирате дървото на документа в Aspose.Words.
Когато отворите примерния документ, представен по-рано, в документ 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 и осигурява ChildNodes събиране, позволяващо индексиран или изброен достъп до възлите на детето. На ChildNodes собственост е жива колекция от възли, което означава, че когато документът се променя, като например когато възлите се отстраняват или добавят, ChildNodes събирането се актуализира автоматично.
Ако възелът няма дете, тогава ChildNodes Имотът връща празна колекция. Можете да проверите дали CompositeNode съдържа детски възли с помощта на HasChildNodes собственост.
Следният пример с код показва как да се изброят незабавните детски възли на a CompositeNode
използване на числителя, предоставен от ChildNodes
събиране:
Следният пример с код показва как да се изброят незабавните детски възли на a 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.
Следният пример за код показва как да използвате типирани свойства за достъп до възлите на дървото на документа: