今回から具体的なノード操作に入ります。まずは、基本操作となる新しくノードを追加する方法です。DXL では次のように少し回りくどい操作が必要となります。
- ノードの新規作成
- 作成したノードを追加
ノードの新規作成
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 件のコメント:
コメントを投稿