public interface LSParserFilter
LSParserFilter
提供了应用程序在解析过程中检查节点的能力。在检查每个节点时,可以修改或移除节点,或者提前终止整个解析过程。
当解析器调用过滤器方法时,所有者文档和DOMImplementation对象已经存在并且可以访问。文档元素永远不会传递给LSParserFilter
方法,即无法过滤掉文档元素。文档、文档类型、符号、实体和属性节点永远不会传递给过滤器上的acceptNode
方法。如果参数"entities"设置为false
,则会将EntityReference
节点的子节点传递给过滤器。请注意,根据参数"entities"的描述,未展开的实体引用节点永远不会被丢弃,并且始终会传递给过滤器。
在解析文档时,所有有效性检查都发生在输入流中的源文档上,而不是在内存中构建的DOM文档上。通过过滤器,内存中的文档可能是流中文档的子集,并且其有效性可能受到过滤的影响。
当元素传递给过滤器方法时,所有默认属性必须存在于元素上。所有其他默认内容必须传递给过滤器方法。
DOM应用程序不得在过滤器中引发异常。从过滤器中抛出异常的影响取决于DOM实现。
- 自:
- 1.5
-
Field Summary
Modifier and TypeFieldDescriptionstatic final short
接受节点。static final short
中断文档的正常处理。static final short
拒绝节点及其子节点。static final short
跳过此单个节点。 -
Method Summary
Modifier and TypeMethodDescriptionshort
acceptNode
(Node nodeArg) 解析每个节点解析完成时,解析器将调用此方法。int
告诉LSParser
要显示哪些类型的节点给方法LSParserFilter.acceptNode
。short
startElement
(Element elementArg) 在扫描完每个Element
开始标记之后,但在处理Element
的其余部分之前,解析器将调用此方法。
-
Field Details
-
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中断文档的正常处理。- 另请参阅:
-
-
Method Details
-
startElement
在扫描完每个Element
开始标记之后,但在处理Element
的其余部分之前,解析器将调用此方法。其目的是允许元素(包括任何子元素)被高效地跳过。请注意,只有元素节点会传递给startElement
函数。
传递给过滤器的元素节点将包括所有元素的属性,但不包括任何子节点。该元素可能尚未放置在正在构建的文档中(可能尚未具有父节点)。startElement
过滤器函数可以访问或更改元素的属性。更改命名空间声明不会影响解析器的命名空间解析。
为了效率起见,传递给过滤器的元素节点可能与实际放置在树中的节点不同(如果节点被接受)。实际节点(节点对象标识)在读取和过滤文档的过程中可能会被重用。- 参数:
-
elementArg
- 新遇到的元素。在调用此方法时,元素是不完整的 - 它将具有其属性,但没有子节点。 - 返回:
-
FILTER_ACCEPT
如果应将Element
包含在正在构建的DOM文档中。FILTER_REJECT
如果应拒绝Element
及其所有子节点。FILTER_SKIP
如果应跳过Element
。所有子节点将替换跳过的Element
节点。FILTER_INTERRUPT
如果过滤器希望停止处理文档。中断文档的处理不再保证生成的DOM树是XML格式良好的。该Element
被拒绝。
-
acceptNode
在解析每个节点解析完成时,解析器将调用此方法。节点及其所有后代将存在并完整。父节点也将存在,尽管可能是不完整的,即可能有其他尚未解析的子节点。不会将属性节点传递给此函数。
在此方法内部,新节点可以自由修改 - 可以添加或删除子节点,修改文本节点等。未定义此节点之外文档的状态,并且尝试导航到文档的任何其他部分或修改任何其他部分的影响是未定义的。
对于验证解析器,检查是在过滤器修改之前的原始文档上进行的。不会对过滤器进行的任何文档修改进行有效性检查。
如果拒绝此新节点,则解析器可能会重用新节点及其任何后代。- 参数:
-
nodeArg
- 新构造的节点。在调用此方法时,元素是完整的 - 它具有所有子节点(以及它们的子节点,递归地)和属性,并作为其父节点的子节点附加。 - 返回:
-
FILTER_ACCEPT
如果应将此Node
包含在正在构建的DOM文档中。FILTER_REJECT
如果应拒绝Node
及其所有子节点。FILTER_SKIP
如果应跳过Node
并且Node
应被Node
的所有子节点替换。FILTER_INTERRUPT
如果过滤器希望停止处理文档。中断文档的处理不再保证生成的DOM树是XML格式良好的。该Node
被接受并将是最后一个完全解析的节点。
-
getWhatToShow
int getWhatToShow()告诉LSParser
要显示哪些类型的节点给方法LSParserFilter.acceptNode
。如果未使用此属性将节点显示给过滤器,则节点将自动包含在正在构建的DOM文档中。有关常量的定义,请参阅NodeFilter
。这里使用的常量SHOW_ATTRIBUTE
,SHOW_DOCUMENT
,SHOW_DOCUMENT_TYPE
,SHOW_NOTATION
,SHOW_ENTITY
和SHOW_DOCUMENT_FRAGMENT
在此处无意义。这些节点永远不会传递给LSParserFilter.acceptNode
。
这里使用的常量在[DOM级别2遍历和范围]中定义。
-