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 合成の設計パターンに続いて下さい:

  • 究極のすべてのノードクラスは、 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 DOM, 下の図のようにオブジェクトのツリーが作成されます。

document-example-dom

Document, Section, Paragraph, Table, Shape, Run, そして、図上の他のすべての楕円は、 Aspose.Words Word文書の要素を表すオブジェクト。

お問い合わせ Node タイプ:

しかし、 Node 各ノードを区別するのに十分なクラスです。 Aspose.Words 提供して下さい NodeType 一部を簡素化する列挙 API 特定のタイプのノードを選択します。

各ノードの種類は、各ノードで取得できます。 NodeType プロパティ. このプロパティは、 NodeType 列挙値。 例えば、並列ノードは、 Paragraph クラスリターン NodeTypeお問い合わせParagraphと表ノードは、 Table クラスリターン NodeTypeお問い合わせTableお問い合わせ

次の例では、ノードタイプを取得する方法を示します。 NodeType 列挙:

ドキュメントツリーナビゲーション

Aspose.Words ノードツリーとしてドキュメントを表現し、ノード間を移動することができます。 このセクションでは、ドキュメントツリーを探索およびナビゲートする方法について説明します Aspose.Wordsお問い合わせ

サンプル文書を開くと、先に提示されたドキュメントエクスプローラでは、ノードツリーはそのままに表現されます。 Aspose.Wordsお問い合わせ

document-in-document-explorer

ドキュメントノードの関係

ツリー内のノードは、それらの間に関係があります。

  • 他のノードを含むノードは、 parent.
      • 親ノードに含まれるノードは、 child. 同じ親の子ノードは sibling ノード。
  • ザ・ root ノードは常に Document ノード。

他のノードを derive から含むことができるノード CompositeNode クラス、およびすべてのノードは、最終的に由来する Node クラス。 これらの2つのベースクラスは、ツリー構造のナビゲーションと変更のための一般的な方法と特性を提供します。

次の UML オブジェクト図は、サンプル文書の複数のノードと、親、子、および兄弟のプロパティを介して互いに関係を示しています。

document-nodes-relationships

ドキュメントはNodeの所有者です

ノードは、スタイルやリストなどの重要な文書全体の構造が保存されているため、ツリーから作成または削除された場合でも、常に特定の文書に属しています。 Document ノード。 たとえば、持てることができない Paragraph なし Document 各段落には、文書のグローバルに定義されている割り当てられたスタイルがあります。 このルールは、新しいノードを作成するときに使用されます。 新規追加 Paragraph 直接に DOM コンストラクタに渡されるドキュメントオブジェクトが必要です。

新しい段落を作成するとき DocumentBuilder, ビルダーは常にビルダーを持っています Document それをリンクしたクラス DocumentBuilder.Document プロパティ.

次のコードの例では、ノードを作成するときに、ノードを所有するドキュメントが常に定義されていることを示します。

親ノード

各ノードは、指定した親を持っています ParentNode プロパティ. ノードには、親ノードがない、つまり、 ParentNode 次の例では null です。

      • ノードが作成され、まだツリーに追加されていない。
      • ノードはツリーから削除されました。
      • これは根本です Document 常に null の親ノードを持つノード。

親からノードを呼び出して削除できます。 Remove メソッド。 以下のコードの例では、親ノードへのアクセス方法を示します。

子供のノード

子供のノードにアクセスするための最も効率的な方法 CompositeNode お問い合わせ FirstChild そして、 LastChild それぞれ最初の子ノードと最後の子ノードを返すプロパティ。 子ノードがない場合、これらのプロパティは戻ります nullお問い合わせ

CompositeNode また提供します ChildNodes コレクションは、子ノードへのアクセスをインデックス化または列挙することを可能にします。 ザ・オブ・ザ・ ChildNodes プロパティはノードのライブコレクションです。つまり、ノードが削除または追加されるなど、ドキュメントが変更されるたびに、 ChildNodes 収集は自動的に更新されます。

ノードが子を持たない場合、 ChildNodes プロパティは空のコレクションを返します。 かどうか確認できます CompositeNode どの子ノードも、 HasChildNodes プロパティ.

次のコードの例では、即時の子ノードを列挙する方法を示します。 CompositeNode 提供の列挙器を使用して ChildNodes コレクション:

次のコードの例では、即時の子ノードを列挙する方法を示します。 CompositeNode インデックスアクセスを使用する:

兄弟ノード

特定のノードをすぐに優先またはフォローするノードをすぐに取得できます。 PreviousSibling そして、 NextSibling それぞれプロパティ。 ノードが親の最後の子である場合、 NextSibling プロパティは nullお問い合わせ 逆に、ノードがその親の最初の子である場合、 PreviousSibling プロパティは nullお問い合わせ

次のコードの例では、コンポジットノードの直接および間接的な子ノードを効率的に訪問する方法を示します。

子どもと両親のノードへのアクセス

これまでのところ、ベースタイプの1つを返すプロパティについて議論しました。 Node または CompositeNodeお問い合わせ しかし、例えば、特定のノードクラスに値を投げる必要がある場合があります。 Run または Paragraphお問い合わせ つまり、キャスティングから仕事をするときは、完全にキャスティングから離れることはできません。 Aspose.Words DOM, コンポジットです。

鋳造の必要性を減らすため、最も Aspose.Words クラスは、強力なタイプのアクセスを提供するプロパティとコレクションを提供します。 型アクセスの3つの基本パターンがあります。

タイプされたプロパティは、単に便利なショートカットで、時々から継承された一般的なプロパティよりも簡単にアクセスできます。 Node.ParentNode そして、 CompositeNode.FirstChildお問い合わせ

次のコードの例では、typed プロパティを使用してドキュメントツリーのノードにアクセスする方法を示します。