2025/03/23

DXL Step-by-Step:#51)ノード操作 ④ - ノードの新規作成

今回から具体的なノード操作に入ります。まずは、基本操作となる新しくノードを追加する方法です。DXL では次のように少し回りくどい操作が必要となります。

  1. ノードの新規作成
  2. 作成したノードを追加


ノードの新規作成

DXL でノードを追加する機能は、NotesDOMDocumentNode クラスに集約されています。ヘルプで確認すると、このクラスだけ Create???Node というメソッドを持っています。

NotesDOMDocumentNode (LotusScript®)

全てのノードを作成できるようですが、『#48)ノード操作 ① - DXL 操作で必須のクラス』で説明した通り、通常使いで必要なノードは限られています。次のメソッドだけ覚えれば十分です。

◇ element ノードの作成

CreateElementNode メソッドで作成します。引数はノード名で、戻り値は 作成された NotesDOMElementNode オブジェクトとなります。

◇ text ノードの作成

CreateTextNode メソッドで作成します。引数はノードデータとなる文字列で、戻り値は作成された NotesDOMTextNode オブジェクトとなります。


ノードの作成方法はわかりましたが少々釈然としないですね。それは、どこに作成されるのか不明瞭だからです。その作業を行うのが次のステップです。


作成したノードの追加

ノードの追加は AppendChild メソッドで行います。このメソッドは、NotesDOMNode で定義されていて、このクラスを継承している NotesDOMElementNode でも利用できます。

例えば次のように記述します。

   ' 段落作成
   Set denNew = ddn.CreateElementNode("par")  ' ノードの新規作成
   Call denNew.SetAttribute("def", "1")
   Set denNew = denCur.AppendChild(denNew)  ' ノードを希望する位置に追加

ddn(NotesDOMDocumentNode のオブジェクト)のメソッドで section ノードを作成し、denNew に代入されます。AppendChild で作成したノードを追加しますが、メソッドをコールしたオブジェクト denCur の最後のノードとして追加されます。

DXL のイメージには次のような感じです。下図の場合 denCur オブジェクトは richtext ノードということになります。

ところで、SetAttribute メソッドで def という属性を追加しています。AppendChild を実行する前にセットしていますが、正しく DXL に反映されています。

以下のように記述しても、同じ結果を得られます。

   ' 段落作成
   Set denNew = ddn.CreateElementNode("par")  ' ノードの新規作成
   Set denNew = denCur.AppendChild(denNew)  ' ノードを希望する位置に追加
   Call denNew.SetAttribute("def", "1")

AppendChild メソッドの戻り値は追加されたノードなのですが、追加してから属性をセットしています。このようにノードは、属性をセットしてから追加しても、DXL ツリーに追加してからでもかまいません。


まとめ

Create???Node で作成されたノードは DXL のツリーのどこにも属さない 宙に浮いたような状態 で作成されます。このノードを DXL ツリーに追加するのが AppendChild ノードということになります。


前回 DXL Step-by-Step 次回


0 件のコメント:

コメントを投稿