Aspose.Words Document Object Model (DOM)

The Aspose.Words Document Object Model (DOM) este o reprezentare în memorie a unui document Word. Aspose.Words DOM vă permite să citiţi programatic, să manipulaţi şi să modificaţi conţinutul şi formatarea unui document Word.

Această secțiune descrie clasele principale ale Aspose.Words DOM și relațiile dintre ele. Prin utilizarea clasei Aspose.Words și a clasei DOM, poți obține acces programatic la elementele documentului și la formatare.

Creare Document Arbore de Obiecte

Când un document este citit în Aspose.Words DOM, atunci se construiește un obiect de arbore și diferite tipuri de elemente ale documentului sursă au propriile lor obiecte de DOM cu diverse proprietăți.

Construiește noduri de document

Când Aspose.Words citește un document Word în memorie, acesta creează obiecte de tipuri diferite care reprezintă diverse elemente ale documentului. Fiecare rulare a unui text, paragraf, tabel sau secțiune este un nod și chiar și documentul în sine este un nod. Aspose.Words definește o clasă pentru fiecare tip de nod document.

Arborele de documente în Aspose.Words urmează modelul de proiectare Composite:

Toate clasele de noduri derivă în cele din urmă din clasa Node, care este clasa de bază în Aspose.Words Document Object Model.

  • Nodurile care pot conține alte noduri, de exemplu, Section sau Paragraph, provin din clasa CompositeNode, care derivă din clasa Node.

Diagrama furnizată de mai jos arată moștenirea dintre clasele de noduri Aspose.Words Document Object Model (DOM). Numele claselor abstracte sunt în italice.

aspose-words-dom

Să analizăm un exemplu. Următoarea imagine prezintă un Microsoft Word document cu diferite tipuri de conținut.

document-example-aspose-words

Când se citește documentul de mai sus în Aspose.Words DOM, este creat arborele obiectelor, așa cum se arată în schema de mai jos.

dom-aspose-words

Document, Section, Paragraph, Table, Shape, Run și toate celelalte elipse de pe diagramă sunt Aspose.Words obiecte care reprezintă elemente din documentul Word.

Obțineți un Node Tip

Cu toate că clasa Node este suficientă pentru a distinge noduri diferite unele de altele, Aspose.Words oferă enumerarea NodeType pentru a simplifica unele sarcini API, cum ar fi selectarea nodurilor de un anumit tip.

Tipul fiecărui nod poate fi obținut folosind proprietatea NodeType. Această proprietate returnează o valoare enumerată " NodeType “. Spre exemplu, un nod de paragraf reprezentat de clasa Paragraph returnează NodeType.Paragraph, iar un nod de tabel reprezentat de clasa Table returnează NodeType.Table.

Exemplul de mai jos arată cum să obții un tip nod folosind enumerarea NodeType:

Navigare în arborele de documente

Aspose.Words reprezintă un document ca un arbore de noduri, care vă permite să navigaţi între noduri. Această secțiune descrie modul în care să explorezi și să navighezi copacul documentelor din Aspose.Words.

Când deschizi documentul de exemplu, prezentat mai sus, în Explorer-ul Documentelor, arborele nodurilor apare exact așa cum este reprezentat în Aspose.Words.

document-in-document-explorer

Relaţii între noduri de document

Nodurile din arbore au relaţii între ele:

  • Un nod care conține alt nod este un parent.
  • Nodul conținut în nodul părinte este un child.. Nodurile copil cu același nod părinte sunt sibling noduri.
  • Nodul root este întotdeauna nodul Document.

Nodurile care pot conține alte noduri sunt derivate din clasa CompositeNode, iar toate nodurile derivă în final din clasa Node. Aceste două clase de bază oferă metode și proprietăți comune pentru navigarea și modificarea structurii copacilor.

Diagrama obiectelor UML de mai jos prezintă mai multe noduri ale documentului de exemplu și relațiile lor unul cu celălalt prin intermediul proprietăților părinte, copil și frate”:

document-nodes-relationships-aspose-words

Document este Proprietar Nod

Un nod aparține întotdeauna unui anumit document, chiar dacă acesta a fost creat recent sau eliminat din copac, deoarece structuri esențiale de tip documentar cum ar fi stilurile și listele sunt stocate în nodul Document. De exemplu, nu este posibil să ai un Paragraph fără un Document pentru că fiecare paragraf are un stil atribuit care este definit la nivel global pentru document. Această regulă este folosită atunci când se creează orice nod nou. Adăugarea unei noi Paragraph direct în DOM necesită un obiect document transmis constructorului.

Când creezi un nou paragraf folosind DocumentBuilder, constructorul are întotdeauna o clasă Document legată prin proprietatea DocumentBuilder.Document.

Exemplul de cod următor arată că atunci când creați orice nod, un document care va deține nodul este întotdeauna definit:

Node părinte

Fiecare nod are un părinte specificat de proprietatea ParentNode. Un nod nu are nod părinte, adică ParentNode este nul, în următoarele cazuri:

nodul tocmai a fost creat și nu a fost încă adăugat la copac.

  • Nodul a fost scos din arbore.
  • Acesta este nodul rădăcină Document care are întotdeauna un nod părinte nul.

Poţi elimina un nod din părintele său prin apelarea metodei Remove.Exemplul de cod următor arată cum se accesează nodul părinte:

Nodi copii

Cea mai eficientă modalitate de a accesa nodurile copil ale unui CompositeNode este prin proprietățile FirstChild și LastChild care returnează primul și ultimul nod copil, respectiv. Dacă nu există noduri copil, aceste proprietăți returnează null.

CompositeNode oferă, de asemenea, metoda GetChildNodes care permite accesul indexat sau enumerat la nodurile fiice. Proprietatea ChildNodes este o colecție vie de noduri, ceea ce înseamnă că ori de câte ori documentul este modificat, cum ar fi atunci când se elimină sau se adaugă noduri, colecția ChildNodes este actualizată automat.

Dacă un nod nu are copii, atunci proprietatea ChildNodes returnează o colecție goală. Poţi verifica dacă CompositeNode conţine vreun nod copil folosind proprietatea HasChildNodes.

Exemplul de cod următor arată cum să enumerați nodurile copil imediate ale unui CompositeNode folosind enumeratorul furnizat de colecția ChildNodes:

Exemplul de cod următor arată cum să enumerăm nodurile copil imediate ale unui CompositeNode folosind accesul indexat:

Node-uri fratești

Puteți obține nodul care precede imediat sau urmează un anumit nod folosind proprietățile PreviousSibling și NextSibling, în mod corespunzător. Dacă un nod este ultimul copil al părintelui său atunci proprietatea NextSibling este null. “Dimpotrivă, dacă nodul este primul copil al părintelui său, proprietatea PreviousSibling este null.”

Exemplul de cod următor prezintă modul în care se pot vizita eficient toate nodurile copil directe și indirecte ale unui nod compus:

Accesul tipat la nodurile copil și părinte

Până acum am discutat proprietățile care returnează unul din tipurile de bază - Node sau CompositeNode. Dar uneori există situații în care ai putea avea nevoie să transmiți valori la o anumită clasă de nod, cum ar fi Run sau Paragraph. Adică, nu poţi scăpa complet de aruncări când lucrezi cu Aspose.Words DOM, care este compozit.

Pentru a reduce nevoia de punere în scene, majoritatea Aspose.Words clase oferă proprietăți și colecții care oferă acces puternic tipat. Există trei modele de bază pentru accesul tastat:

Proprietățile tipizate sunt doar scurtături utile care, uneori, oferă acces mai ușor decât proprietățile generice moștenite de la Node.ParentNode și CompositeNode.FirstChild.

Exemplul următor de cod arată cum să folosești proprietățile tipizate pentru a accesa nodurile din arborele de documente: