Aspose.Words Document Object Model (DOM)

• Aspose.Words Document Object Model (DOM) představuje dokument Word. • Aspose.Words DOM umožňuje programově číst, manipulovat a upravovat obsah a formátování dokumentu Word.

Tento oddíl popisuje hlavní třídy Aspose.Words DOM a jejich vztahy. Použitím Aspose.Words DOM třídy, můžete získat programový přístup k prvkům dokumentů a formátování.

Vytvořit a Document Strom objektu

Při čtení dokumentu do Aspose.Words DOM,? pak je postaven strom objektů a různé typy prvků zdrojového dokumentu mají vlastní DOM objekty stromu s různými vlastnostmi.

Vytvořit uzel dokumentu strom

Kdy? Aspose.Words čte dokument Word do paměti, vytváří objekty různých typů, které představují různé prvky dokumentu. Každý běh textu, odstavec, tabulka nebo sekce je uzel, a dokonce i samotný dokument je uzel. Aspose.Words definuje třídu pro každý typ uzel dokumentu.

Strom dokumentu Aspose.Words následuje vzor složeného návrhu:

  • Všechny třídy uzel nakonec vyplývá z Node třída, která je základní třída v Aspose.Words Document Object Model.
  • Uzly, které mohou obsahovat jiné uzly, například, Section nebo Paragraph, odvozen od CompositeNode třída, která pochází z Node třída.

Níže uvedený diagram ukazuje dědictví mezi třídami nódu Aspose.Words Document Object Model (DOM). Jména abstraktních tříd jsou v kurzívě.

aspose-words-dom

Podívejme se na příklad. Následující obrázek ukazuje Microsoft Word dokument s různými typy obsahu.

document-example-aspose-words

Při čtení výše uvedeného dokumentu do Aspose.Words DOM, je vytvořen strom objektů, jak je znázorněn v schématu níže.

dom-aspose-words

Document, Section, Paragraph, Table, Shape, Run, a všechny ostatní elipsy na diagramu jsou Aspose.Words objekty, které představují prvky dokumentu Word.

Získejte Node Typ

I když Node třída stačí k rozlišení různých uzlů od sebe, Aspose.Words poskytuje NodeType počet pro zjednodušení některých API úkoly, jako je výběr uzlů konkrétního typu.

Typ každého uzlu lze získat pomocí NodeType majetek. Tato vlastnost vrací NodeType hodnota výčtu. Například odstavec uzel zastoupený Paragraph třída vrací NodeType.Paragraph, a stolní uzel zastoupený Table třída vrací NodeType.Table.

Následující příklad ukazuje, jak získat typ nódu pomocí NodeType číslice:

Navigace stromu dokumentu

Aspose.Words představuje dokument jako uzel stromu, který vám umožní navigaci mezi uzly. Tato sekce popisuje, jak prozkoumat a procházet strom dokumentů v Aspose.Words.

Když otevřete vzorový dokument, který byl předložen dříve, v dokumentu Explorer, uzel se objeví přesně tak, jak je zastoupen v Aspose.Words.

document-in-document-explorer

Vztahy uzel dokumentu

Uzely na stromě mezi nimi mají vztah:

  • Uzel obsahující další uzel je parent.
  • Uzel obsažený v rodičovském uzlu je child. Dětské uzly stejného rodiče jsou sibling uzly.
  • The root Uzel je vždy Document Uzel.

Uzely, které mohou obsahovat jiné uzly odvozeny z CompositeNode třída, a všechny uzly nakonec vyplývá z Node třída. Tyto dvě základní třídy poskytují společné metody a vlastnosti pro navigaci a modifikaci struktury stromu.

Následující schéma UML objektu zobrazuje několik uzlů výběrového dokumentu a jejich vzájemné vztahy prostřednictvím vlastností rodičů, dítěte a sourozenců:

document-nodes-relationships-aspose-words

Dokument je vlastníkem uzlu

Uzel vždy patří k určitému dokumentu, i když byl jen vytvořen nebo odstraněn ze stromu, protože životně důležité struktury, jako jsou styly a seznamy jsou uloženy v Document Uzel. Například, není možné mít Paragraph bez Document protože každý odstavec má přiřazený styl, který je pro dokument definován globálně. Toto pravidlo se používá při vytváření nových uzlů. Přidání nového Paragraph přímo do DOM vyžaduje dokument objekt předán konstruktéru.

Při vytváření nového odstavce DocumentBuilder, Stavitel má vždy Document třída spojená s ní prostřednictvím DocumentBuilder.Document majetek.

Následující příklad kódu ukazuje, že při vytváření jakéhokoliv uzlu je vždy definován dokument, který bude vlastnit uzel:

Rodičovský uzel

Každý uzel má rodiče určené ParentNode majetek. Uzel nemá rodičovský uzel. ParentNode je nulová, v těchto případech:

  • Uzel byl právě vytvořen a ještě nebyl přidán do stromu.
  • Uzel byl odstraněn ze stromu.
  • Tohle je kořen. Document Uzel, který má vždy nulový mateřský uzel.

Můžete odstranit uzel z jeho rodiče voláním Remove metoda. Následující příklad kódu ukazuje, jak přistupovat k rodičovskému uzelu:

Dětské uzely

Nejúčinnější způsob, jak se dostat do dětských uzlů CompositeNode je přes FirstChild a LastChild vlastnosti, které vrátí první a poslední dětské uzly, resp. Pokud nejsou žádné dětské uzly, tyto vlastnosti se vrátí null.

CompositeNode také poskytuje GetChildNodes metoda umožňující indexovaný nebo číselný přístup do dětských uzlů. • ChildNodes vlastnost je živá sbírka uzlů, což znamená, že pokaždé, když je dokument změněn, jako když jsou uzly odstraněny nebo přidány, ChildNodes sběr je automaticky aktualizován.

Pokud uzel nemá dítě, pak ChildNodes nemovitost vrací prázdnou sbírku. Můžete zkontrolovat, zda CompositeNode obsahuje jakékoli dětské uzliny pomocí HasChildNodes majetek.

Následující příklad kódu ukazuje, jak vyjmenovat okamžité dětské uzly CompositeNode pomocí čitatele poskytnutého ChildNodes sběr:

Následující příklad kódu ukazuje, jak vyjmenovat okamžité dětské uzly CompositeNode pomocí indexovaného přístupu:

Sourozenecké uzly

Můžete získat uzel, který okamžitě předchází nebo následuje konkrétní uzel pomocí PreviousSibling a NextSibling vlastnosti, resp. Pokud uzel je poslední dítě svého rodiče, pak NextSibling majetek je null. Naopak, pokud je uzel prvním dítětem svého rodiče, PreviousSibling majetek je null.

Následující příklad kódu ukazuje, jak efektivně navštívit všechny přímé a nepřímé dětské uzly kompozitního uzlu:

Typizovaný přístup k dětskému a rodičovskému uzlu

Doposud jsme diskutovali o vlastnostech, které vrací jeden ze základních typů Node nebo CompositeNode. Ale někdy jsou situace, kdy byste mohli hodit hodnoty do určité třídy uzlů, jako například Run nebo Paragraph. To znamená, že nemůžete zcela uniknout od castingu při práci s Aspose.Words DOM, což je složené.

Aby se snížila potřeba odlitků, většina Aspose.Words třídy poskytují vlastnosti a sbírky, které poskytují silně typed přístup. Existují tři základní vzorce zadaného přístupu:

Typované vlastnosti jsou pouze užitečné zkratky, které někdy poskytují jednodušší přístup než obecné vlastnosti zděděné Node.ParentNode a CompositeNode.FirstChild.

Následující příklad kódu ukazuje, jak použít zadané vlastnosti pro přístup do uzlů stromu dokumentu: