2023/07/25

DXL ことはじめ:#4)LotusScript で DXL を参照するには?

DXL を操作するための LotusScript の NotesClass を確認しましょう。


NotesDOMParser クラス

Parse とは、解析するという意味です。IT のエリアでは、一定のルールに従って記述されたデータを解析し、プログラムで操作できるよう構造化されたデータに変換することを言います。Parser はそのような変換を行うソフトウェアということになりますね。

今回の事例の場合、NotesDOMParser クラスは、NotesDXLExporter が出力した DXL を解析し、LotusScript で扱えるよう変換する役割を担います。よって、DXL と LotusScript の橋渡し的な役割を果たす裏方さんということになります。

NotesDOMParser (LotusScript®)


では、具体的な利用方法です。サンプルコードは次のようになります。

Dim dexp As NotesDXLExporter
Dim dprs As NotesDOMParser

'Dominoデータ を DXL に変換する準備
Set dexp = xns.CreateDXLExporter
Call dexp.SetInput(vnd)

'パーサーに変換する DXL をセット
Set dprs = xns.CreateDOMParser()
Call dprs.SetInput(dexp)

'DXL 変換を実行
Call dexp.Process()

まず、NotesDXLExporter のオブジェクトを作成し、DXL 化するオブジェクトである文書 vnd を SetInput メソッドで設定します。次に、NotesDOMParser のオブジェクトを作成し、先に定義した NotesDXLExporter のオブジェクトを入力として定義します。最後に、NotesDXLExporter クラスの Process メソッドを実行し、DXL の変換を実行します。

これで、文書が DXL に変換され、それがパーサーに渡されて解析、LotusScript で扱えるという一連の流れを構築できます。


NotesDOM?????Node クラス

パーサーが解析したデータには、NotesDOM?????Node クラス経由でアクセスし、操作します。ヘルプを見ると似たような名前のクラスが多数あります。一部を抜粋すると次の通りです。

クラス名 用途(Designer ヘルプより抜粋)
NotesDOMDocumentNode XML 文書全体を表します。文書ツリーのルートです。
NotesDOMElementNode XML 文書の要素を表します。
NotesDOMCharacterDataNode DOM ノードの文字データを表します。
NotesDOMTextNode 要素または属性の Text 形式の内容を表します。

それぞれのヘルプを確認すると、これらのプロパティやメソッドを確認するとかなりの部分が重複していることがわかります。なかなか、難解ですね。

これは、各クラスが NotesDOMNode クラスを継承して定義されているためです。NotesRichTextItem クラスが、NotesItem クラスを継承しており、NotesRichTextItem のオブジェクトでも NotesItem クラスのプロパティやメソッドが使えるのと同じですね。

この基底クラス(NotesDOMNode)の機能が、このシリーズのクラスの基本機能であり、違いがある部分が、各クラスの特徴ということになります。ヘルプからプロパティとメソッド、継承元を抜粋すると次の表のようになりました。

いかがですか? 違いがよくわかりますね。

NotesDOMDocumentNode には、Create?????Node というメソッドが多数ありますね。このクラスは各種 Node を作成する機能を担当するようです。また、GetElementsByTagName というメソッドを持つので、配下のノードを検索する機能を持ちます。

NotesDOMElementNode も GetElementsByTagName メソッドを持ちます。この2つのクラスは、きっと多数の配下を持つノードを想定したクラスということでしょう。

NotesDOMElementNode では、GetAttribute や RemoveAttribute などアットリビュート(属性)に対するメソッドを持っています。また、TagName というプロパティも持っていますね。

NotesDOMTextNode は、その名の通り文字列を扱うノードを定義しています。SplitText や SubstringData のように文字列を操作するメソッドを持ちます。


次回からは、これらのクラスを使って、DXL にアクセスしてみましょう。

前回 DXL ことはじめ 次回

0 件のコメント:

コメントを投稿