具体的なノード操作のテクニックを紹介する前にノード間の関係や種類、取得方法についてまとめます。過去の記事のおさらい的な部分もありますが、改めて整理します。
Domino オブジェクトと DXL の関係
DXL を操作するためには、DXL の基本構造を知る必要があります。
NotesDOMParer クラスは Domino オブジェクトを DXL に変換し、整形してくれるクラスです。このクラスの Document プロパティで ”DXL 全体” のノードである NotesDOMDocumentNode のオブジェクトを取得できます。そして DocumentElement プロパティにより ”Domino オブジェクト全体” のノードである NotesDOMElementNode オブジェクトが取得できます。
文書の場合、”文書全体” のノード名は document ですが、エージェントの場合は agent、イメージリソースでは imageresource でした(#6, #7, #8 を参照)。DocumentElement プロパティで取得するからと言って、ノード名は必ずしも document ではないので注意しましょう。
NotesDOMDocumentNode の役割
”DXL 全体” のノードである NotesDOMDocumentNode のオブジェクトには、特別な役割があります。それは、ノードの新規作成ができることです。
NotesDOMElementNode など NotesDOM???Node オブジェクトは多数ありますが NotesDOMDocumentNode 以外ではノードの作成ができません。
DXL の構造とノードの種類
文書内のノードのを確認すると次のようになっています。一般的に使用するのは 3 種類です。
NotesDOMElementNode は item や richtext などのノード名を持ち、配下に別のノードを保持することがあります。また、name や size などの属性を持つことがあります。属性には NotesDOMAttributeNode というクラスが割り当てらていますが、NotesDOMElementNode のメソッドからアクセスできるので、前回紹介した必須クラスに入れていません。
もう一つ重要なノードとして、NotesDOMTextNode があります。DXL 内で文字列を表すノードで、NotesDOMElementNode の子ノードとして存在します。
NotesDOMElementNode は 1 つ以上の子ノードを持つことができます。子ノードは NotesDOMElementNode の場合もあれば、NotesDOMTextNode の場合もあり、混在することもあります。
なお、NotesDOMTextNode は子ノードを持つことはありません。
ノード間の関係と取得方法
上記の通り、ノードには親子関係があります。そして、複数の子ノードを持ちうるので、兄弟の関係も存在します。NotesDOM???Node クラスには、それぞれのノードにアクセスするためのプロパティが用意されています。
この関係を理解すれば、自由に DXL サーフができますね。
FirstChild | 最初の子ノード |
LastChild | 最後の子ノード |
ParentNode | 親のノード |
NextSibling | 次の兄弟ノード |
PreviousSibling | 直前の兄弟ノード |
前回 | DXL Step-by-Step | 次回 |
0 件のコメント:
コメントを投稿