共通 DOM API

org.w3c.dom.ls
インタフェース LSParserFilter


public interface LSParserFilter

アプリケーションは、LSParserFilter を使って、解析中に構築されるノードを検証することができます。各ノードを検証するときは、ノードを変更または削除したり、解析全体を早期に終了したりできます。

パーサが任意のフィルタメソッドを呼び出す時点で、所有者 Document オブジェクトと DOMImplementation オブジェクトが存在するため、各オブジェクトにアクセスできます。ドキュメント要素は、LSParserFilter メソッドに渡されることはありません。つまり、ドキュメント要素をフィルタ処理することはできません。また、DocumentDocumentTypeNotationEntity、および Attr ノードはフィルタの acceptNode メソッドに渡されることはありません。EntityReference ノードの子ノードは entities パラメータが false に設定された場合にフィルタに渡されます。entities パラメータで説明されているように、展開されていない実体参照ノードは破棄されず、常にフィルタに渡されます。

ドキュメント解析中に発生するすべての妥当性検査は、DOM ドキュメントがメモリで構築されたときに DOM ドキュメントで発生するのではなく、入力ストリームにソースドキュメントが現れたときにソースドキュメントで発生します。フィルタを使用する場合、メモリのドキュメントはストリーム上のドキュメントのサブセットである可能性があり、ドキュメントの妥当性はフィルタ処理により影響を受けた可能性があります。

要素がフィルタメソッドに渡される場合は、すべてのデフォルト属性が要素上に存在しなければなりません。また、ほかのすべてのデフォルトの内容はフィルタメソッドに渡されなければなりません。

DOM アプリケーションは、フィルタで例外を発生してはなりません。フィルタから例外をスローする影響は DOM 実装によって異なります。

「Document Object Model (DOM) Level 3 Load and Save Specification」も参照してください。


フィールドの概要
static short FILTER_ACCEPT
          ノードを受け入れます。
static short FILTER_INTERRUPT
          ドキュメントの通常の処理に割り込みます。
static short FILTER_REJECT
          ノードとその子を拒否します。
static short FILTER_SKIP
          この単一ノードをスキップします。
 
メソッドの概要
 short acceptNode(Node nodeArg)
          このメソッドは、各ノードの解析が終了したときにパーサにより呼び出されます。
 int getWhatToShow()
          LSParserFilter.acceptNode メソッドに示されるノードの型を LSParser に指定します。
 short startElement(Element elementArg)
          パーサは、Element 開始タグがすべて走査されたあと、残りの Element が処理される前にこのメソッドを呼び出します。
 

フィールドの詳細

FILTER_ACCEPT

static final short FILTER_ACCEPT
ノードを受け入れます。

関連項目:
定数フィールド値

FILTER_REJECT

static final short FILTER_REJECT
ノードとその子を拒否します。

関連項目:
定数フィールド値

FILTER_SKIP

static final short FILTER_SKIP
この単一ノードをスキップします。このノードの子は引き続き考慮されます。

関連項目:
定数フィールド値

FILTER_INTERRUPT

static final short FILTER_INTERRUPT
ドキュメントの通常の処理に割り込みます。

関連項目:
定数フィールド値
メソッドの詳細

startElement

short startElement(Element elementArg)
パーサは、Element 開始タグがすべて走査されたあと、残りの Element が処理される前にこのメソッドを呼び出します。これは、すべての子を含む要素を効率的にスキップするためです。要素ノードだけが startElement 関数に渡されます。
フィルタ処理のために startElement に渡された要素ノードは、Element のすべての属性を含みますが、子ノードを含むことはありません。Element は、作成されているドキュメントにまだ配置されていない可能性があります (親ノードを持つことはできない)。
startElement フィルタ関数は Element の属性を評価または変更できます。名前空間宣言を変更しても、パーサによる名前空間の解決に影響はありません。
効率化のために、ノードが受け入れられた場合、フィルタに渡された Element ノードはツリーに実際にあるノードと同じでなくてもかまいません。また、ドキュメントの読み取りとフィルタ処理中に、実際のノード (ノードオブジェクト識別) を再使用できます。

パラメータ:
elementArg - 新規に見つかった要素。このメソッドが呼び出される時点で、要素は不完全である。要素は属性を持つことになるが、子を持つことはない
戻り値:
  • FILTER_ACCEPT 構中の DOM ドキュメントに Element が含まれる必要がある場合
  • FILTER_REJECT Element とそのすべての子を拒否する必要がある場合
  • FILTER_SKIP Element をスキップする必要がある場合。すべての子はスキップされた Element ノードの代わりに挿入される
  • FILTER_INTERRUPT フィルタによるドキュメントの処理を停止したい場合。ドキュメントの処理を中断すると、結果の DOM ツリーが整形式の XML であることが保証されなくなる。Element は拒否される
ほかの値が返されると、指定されていない動作を生じる

acceptNode

short acceptNode(Node nodeArg)
このメソッドは、各ノードの解析が終了したときにパーサにより呼び出されます。この時点で、ノードとそのすべての子孫が完全な形で存在します。親ノードも存在しますが、不完全な可能性があります。つまり、親ノードには、解析されていない子がほかに存在する可能性があります。属性ノードはこの関数に渡されることはありません。
このメソッド内から、新規ノードを自由に変更できます。また、子の追加や削除、テキトノードの変更も可能です。このノード以外のドキュメントの残りの状態は定義されていません。ドキュメントのほかの部分への移動または変更を試みた場合の影響は定義されていません。
検証中のパーサの場合、チェックはフィルタによる変更の前に元のドキュメント上で行われます。妥当性検査は、フィルタにより変更されたドキュメント上では行われません。
この新規ノードが拒否された場合、パーサは新規ノードとその子孫を再使用する場合があります。

パラメータ:
nodeArg - 新規に構築された要素。このメソッドが呼び出されたとき、要素は完全である。つまり、要素はそのすべての子 (さらに再帰的にその子) と属性を持っており、子として親に接続される
戻り値:
  • FILTER_ACCEPT 構築中の DOM ドキュメントに、この Node を追加する必要がある場合
  • FILTER_REJECT Node とそのすべての子を拒否する場合
  • FILTER_SKIP Node をスキップする必要があり、NodeNode のすべての子に置き換える必要がある場合
  • FILTER_INTERRUPT フィルタによるドキュメントの処理を停止したい場合。ドキュメントの処理を中断すると、結果の DOM ツリーが整形式の XML であることが保証されなくなる。Node は受け入れられ、完全に解析された最後のノードになる

getWhatToShow

int getWhatToShow()
LSParserFilter.acceptNode メソッドに示されるノードの型を LSParser に指定します。この属性を使ってフィルタにノードが示されない場合、ノードは構築中の DOM ドキュメントに自動的に含められます。定数の定義については、NodeFilter を参照してください。SHOW_ATTRIBUTESHOW_DOCUMENTSHOW_DOCUMENT_TYPESHOW_NOTATIONSHOW_ENTITY、および SHOW_DOCUMENT_FRAGMENT 定数はここでは意味がありません。これらのノードが LSParserFilter.acceptNode に渡されることはありません。
ここで使用される定数は、[DOM Level 2 Traversal and Range] で定義されています。


共通 DOM API

バグや機能要求の報告
Java は、米国およびその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 2004 Sun Microsystems, Inc. 4150 Network Circle
Santa Clara, California, 95054, U.S.A. All Rights Reserved.