Aspose.Words Document Object Model (DOM)

The Aspose.Words Document Object Model (DOM) je in-paměti zastoupení dokumentu Word. The 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 dokumentu a formátování.

Vytvořit dokument Strom objektu

Při čtení dokumentu do Aspose.Words <span notrans="<span notrans=" 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 Kompozitního návrhu:

  • Všechny uzel třídy 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á následně vyplývá z Node třída.

Níže uvedený diagram ukazuje dědictví mezi třídami uzlů 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 druhy obsahu.

document-example

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

document-example-dom

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

Získat 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, například 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 uzel pomocí NodeType číslice:

Navigace pro dokument Strom

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í a sourozenců:

document-nodes-relationships

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 pro dokument, jako jsou styly a seznamy jsou uloženy v Document Uzel. Například, není možné mít Paragraph bez a 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 objekt dokumentu předávané konstruktorovi.

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.
  • To 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 mateřskému uzlu:

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 neexistují dětské uzly, tyto vlastnosti se vrátí null.

CompositeNode také poskytuje ChildNodes sběr umožňující indexovaný nebo číselný přístup do dětských uzlů. The ChildNodes vlastnost je živou sbírkou uzlů, což znamená, že kdykoli se dokument změní, jako je například 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 jeho 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 napsané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žívat zadané vlastnosti pro přístup do uzlů stromu dokumentu: