-
public interface LSParserFilter
LSParserFilter
提供应用程序在分析时正在构造时检查节点的能力。 当每个节点被检查时,它可以被修改或去除,或者整个解析可以被提前终止。在解析器调用任何一种过滤方法时,所有者Document和DOMImplementation对象都存在并可访问。 文档元素从不传递到
LSParserFilter
方法,即不可能过滤出文档元素。Document
,DocumentType
,Notation
,Entity
,和Attr
节点不会传递至acceptNode
在过滤器上的方法。 如果参数“ entities ”设置为false
,则EntityReference
节点的子节点将传递给过滤器。 请注意,如参数“ entities ”所述,未扩展的实体引用节点永远不会被丢弃,并且始终传递给过滤器。分析文档时的所有有效性检查都会发生在源文档上,因为它在输入流中显示,而不是内置在内存中的DOM文档上。 使用过滤器,内存中的文档可能是流上文档的一个子集,其有效性可能受到过滤的影响。
当元素传递到过滤器方法时,所有默认属性必须存在于元素上。 所有其他默认内容必须传递给过滤器方法。
DOM应用程序不能在过滤器中引发异常。 从过滤器抛出异常的效果是依赖于DOM实现的。
另见Document Object Model (DOM) Level 3 Load and Save Specification 。
- 从以下版本开始:
- 1.5
-
-
Field Summary
Fields Modifier and Type Field 描述 static short
FILTER_ACCEPT
接受节点。static short
FILTER_INTERRUPT
中断文件的正常处理。static short
FILTER_REJECT
拒绝节点及其子节点。static short
FILTER_SKIP
跳过这个单个节点。
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 short
acceptNode(Node nodeArg)
在完成每个节点的解析时,该方法将被解析器调用。int
getWhatToShow()
告诉LSParser
什么类型的节点要显示给方法LSParserFilter.acceptNode
。short
startElement(Element elementArg)
解析器将在每个Element
起始标签被扫描之后,但处理Element
的其余部分之前将调用此方法。
-
-
-
字段详细信息
-
FILTER_ACCEPT
static final short FILTER_ACCEPT
接受节点。- 另请参见:
- Constant Field Values
-
FILTER_REJECT
static final short FILTER_REJECT
拒绝节点及其子节点。- 另请参见:
- Constant Field Values
-
FILTER_SKIP
static final short FILTER_SKIP
跳过这个单个节点。 这个节点的孩子仍然会被考虑。- 另请参见:
- Constant Field Values
-
FILTER_INTERRUPT
static final short FILTER_INTERRUPT
中断文件的正常处理。- 另请参见:
- Constant Field Values
-
-
方法详细信息
-
startElement
short startElement(Element elementArg)
解析器将在每个Element
起始标签被扫描后,但处理Element
的其余部分之前将调用此方法。 意图是允许元素,包括任何孩子,被有效地跳过。 请注意,只有元素节点被传递给startElement
函数。
传递给startElement
进行过滤的元素节点将包含所有Element的属性,但不包括子节点。 元素可能尚未在正在构造的文档中就位(可能没有父节点)。
AstartElement
过滤器函数可以访问或更改元素的属性。 更改命名空间声明对解析器的命名空间解析没有影响。
为了效率,传递给过滤器的Element节点可能与实际放置在树中的节点不同。 并且在读取和过滤文档的过程中可以重用实际节点(节点对象标识)。- 参数
-
elementArg
- 新遇到的元素。 在调用此方法时,元素不完整 - 它将具有其属性,但不包含子项。 - 结果
-
-
FILTER_ACCEPT
如果Element
应该包含在正在构建的DOM文档中。 -
FILTER_REJECT
如果Element
及其所有子女都应该被拒绝。 -
FILTER_SKIP
如果Element
应该被跳过。 所有的孩子都插入了跳过的Element
节点。 -
FILTER_INTERRUPT
如果过滤器想要停止文档的处理。 中断文档的处理不再保证生成的DOM树是XML格式正确的。Element
被拒绝。
-
-
acceptNode
short acceptNode(Node nodeArg)
在完成每个节点的解析时,该方法将被解析器调用。 节点及其所有后代将存在并完成。 父节点也将存在,尽管它可能不完整,即它可能还有尚未被解析的其他子节点。 属性节点不会传递给此函数。
从该方法中可以自由修改新节点 - 可以添加或删除子节点,修改文本节点等。此节点之外的文档的其余部分的状态未定义,并且任何尝试导航到,或修改文档的任何其他部分未定义。
对于验证解析器,在过滤器进行任何修改之前,将对原始文档进行检查。 对过滤器进行的任何文件修改都不进行有效性检查。
如果此新节点被拒绝,解析器可能会重新使用新节点及其任何后代。- 参数
-
nodeArg
- 新构造的元素。 在调用此方法时,该元素是完整的 - 它具有所有子项(及其子代,递归)和属性,并作为子节点附加到其父项。 - 结果
-
-
FILTER_ACCEPT
如果这个Node
应该包含在正在构建的DOM文档中。 -
FILTER_REJECT
如果Node
及其所有的孩子都应该被拒绝。 -
FILTER_SKIP
如果Node
应该被跳过,而Node
应该被所有的Node
的孩子所Node
。 -
FILTER_INTERRUPT
如果过滤器想要停止文档的处理。 中断文档的处理不再保证生成的DOM树是XML格式正确的。Node
被接受,将是最后一个完全解析的节点。
-
-
getWhatToShow
int getWhatToShow()
告诉LSParser
方法LSParserFilter.acceptNode
显示什么类型的节点。 如果节点没有显示给使用此属性的过滤器,则会自动将其包含在正在构建的DOM文档中。 有关NodeFilter
的定义,请参阅NodeFilter
。 常量SHOW_ATTRIBUTE
,SHOW_DOCUMENT
,SHOW_DOCUMENT_TYPE
,SHOW_NOTATION
,SHOW_ENTITY
,并SHOW_DOCUMENT_FRAGMENT
是没有意义的位置。 那些节点永远不会传递给LSParserFilter.acceptNode
。
这里使用的常数在[ DOM Level 2 Traversal and Range ]中定义。
-
-