LSParserFilter
を使用すると、構文解析中のノード構築時に、アプリケーションでノードを検証できます。 各ノードが検証されるので、ノードを変更または削除したり、解析全体を早期に終了することもできます。
パーサーがフィルタ・メソッドを呼び出すとき、所有者DocumentオブジェクトとDOMImplementationオブジェクトは存在し、アクセス可能です。 文書要素がLSParserFilter
メソッドに渡されることはありません。つまり、文書要素をフィルタで排除できません。 Document
、DocumentType
、Notation
、Entity
およびAttr
ノードがフィルタのacceptNode
メソッドに渡されることはありません。 EntityReference
ノードの子ノードは、パラメータ "entities"がfalse
に設定されている場合にフィルタに渡されます。 パラメータ "entities"で説明されているように、拡張されていないエンティティ参照ノードは決して破棄されず、常にフィルタに渡されることに注意してください。
文書解析中に行われるすべての有効性チェックは、DOM文書がメモリーで構築されるときにDOM文書で行われるのではなく、ソース文書が入力ストリームに現れたときにソース文書で行われます。 フィルタでは、メモリーの文書はストリーム上の文書のサブセットになり、また、文書の有効性はフィルタ処理により影響を受けている場合があります。
要素がフィルタ・メソッドに渡されるときは、すべてのデフォルト属性が要素に存在している必要があります。 ほかのすべてのデフォルト・コンテンツは、フィルタ・メソッドに渡される必要があります。
DOMアプリケーションがフィルタの例外をスローすることはありません。 フィルタから例外がスローされる場合、その影響はDOM実装によって異なります。
「 Document Object Model (DOM) Level 3 Load and Save Specification」も参照してください。
- 導入されたバージョン:
- 1.5
-
フィールドのサマリー
修飾子と型フィールド説明static final short
ノードを受け入れます。static final short
文書の通常の処理に割り込みます。static final short
ノードとノードの子を拒否します。static final short
指定した単一のノードをスキップします。 -
メソッドのサマリー
修飾子と型メソッド説明short
acceptNode
(Node nodeArg) 各ノードの解析が完了すると、パーサーはこのメソッドを呼び出します。int
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の属性にアクセスしたり、変更したりできます。 Namespace宣言を変更しても、パーサーによる名前空間解決に影響はありません。
効率のために、フィルタに渡されるElementノードは、そのノードが受け入れられた場合に実際にツリー内に配置されるノードと同じでない可能性があります。 実際のノード(ノード・オブジェクト識別)は、文書の読取りとフィルタ処理の間に再使用できます。- パラメータ:
elementArg
- 新しく検出された要素。 メソッドが呼び出されたとき、要素は不完全であり、属性を持つが、子を持たない。- 戻り値:
-
Element
を構築されるDOM文書に含めるようにする場合はFILTER_ACCEPT
。 -
Element
とそのすべての子を拒否する必要がある場合はFILTER_REJECT
。 -
Element
をスキップするようにする場合はFILTER_SKIP
。 そのすべての子が、スキップされたElement
ノードの場所に挿入される。 -
フィルタによる文書の処理を停止する場合は
FILTER_INTERRUPT
。 文書の処理が中断された場合、生成されるDOMツリーが正しいXML形式になることは保証されない。Element
は拒否される。
-
-
acceptNode
short acceptNode(Node nodeArg) 各ノードの解析が完了すると、パーサーはこのメソッドを呼び出します。 ノードとノードのすべての下位ノードが現れ、完備されます。 親ノードも存在しますが、解析されていない追加の子を持つ場合があるため、不完全である可能性があります。 属性ノードは、この関数に渡されることはありません。
このメソッド内から、新しいノードを自由に変更できます(子の追加または削除、テキスト・ノードの変更など)。このノードの外部にある残りの文書の状態は定義されておらず、文書のその他のいずれかの部分に移動したり、それらの部分を変更したりしようとするどのような試みの影響も未定義です。
妥当性を検証するパーサーの場合は、フィルタによる変更の前に、元の文書に対してチェックが行われます。 フィルタによって行われた文書変更の有効性は一切チェックされません。
この新しいノードが拒否された場合、パーサーは、新しいノードとそのいずれかの下位ノードを再利用する可能性があります。- パラメータ:
nodeArg
- 新しく構築された要素。 メソッドが呼び出されたとき、要素は完全であり、要素のすべての子(および再帰的にそれらの子)と属性を所有し、親に対し子として追加される。- 戻り値:
- この
Node
を構築されるDOM文書に含めるようにする場合はFILTER_ACCEPT
。 -
Node
とそのすべての子を拒否する必要がある場合はFILTER_REJECT
。 -
Node
をスキップするようにし、Node
をNode
のすべての子に置き換えるようにする場合はFILTER_SKIP
。 -
フィルタによる文書の処理を停止する場合は
FILTER_INTERRUPT
。 文書の処理が中断された場合、生成されるDOMツリーが正しいXML形式になることは保証されない。Node
は受け入れられ、最後の完全に解析されたノードになる。
- この
-
getWhatToShow
int getWhatToShow()LSParserFilter.acceptNode
メソッドに対してどのタイプのノードを示すかをLSParser
に通知します。 ノードは、この属性を使用しているフィルタに示されない場合は、構築されているDOM文書に自動的に含められます。 定数の定義についてはNodeFilter
を参照してください。 定数SHOW_ATTRIBUTE
、SHOW_DOCUMENT
、SHOW_DOCUMENT_TYPE
、SHOW_NOTATION
、SHOW_ENTITY
、およびSHOW_DOCUMENT_FRAGMENT
は、ここでは意味がありません。 これらのノードがLSParserFilter.acceptNode
に渡されることはありません。
ここで使用される定数は、[DOM Level 2 Traversal and Range]で定義されています。
-