public interface LSParserFilter
org.w3c.dom.ls.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 。
Constants |
|
---|---|
short |
FILTER_ACCEPT 接受节点。 |
short |
FILTER_INTERRUPT 中断文档的正常处理。 |
short |
FILTER_REJECT 拒绝节点及其子节点。 |
short |
FILTER_SKIP 跳过这个单一节点。 |
Public methods |
|
---|---|
abstract short |
acceptNode(Node nodeArg) 解析器在每个节点解析完成时将调用此方法。 |
abstract int |
getWhatToShow() 告诉 |
abstract short |
startElement(Element elementArg) 解析器将在每个 |
short acceptNode (Node nodeArg)
解析器在每个节点解析完成时将调用此方法。 节点及其所有后代将存在并且完整。 父节点也会存在,尽管它可能是不完整的,也就是说它可能还有额外的子节点尚未被解析。 属性节点永远不会传递给这个函数。
从这种方法中,可以自由修改新节点 - 可以添加或删除子节点,修改文本节点等。未定义该节点之外的文档其余部分的状态,以及任何尝试导航到,或者修改文档的任何其他部分都是未定义的。
为了验证解析器,在对过滤器进行任何修改之前,都会在原始文档上进行检查。 对过滤器所做的任何文档修改均不进行有效性检查。
如果这个新节点被拒绝,解析器可能会重用新节点及其任何后代。
Parameters | |
---|---|
nodeArg |
Node : The newly constructed element. At the time this method is called, the element is complete - it has all of its children (and their children, recursively) and attributes, and is attached as a child to its parent. |
Returns | |
---|---|
short |
|
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 ]中定义。
Returns | |
---|---|
int |
short startElement (Element elementArg)
解析器将在每个Element
开始标记被扫描后,但在处理Element
的其余部分之前调用此方法。 其目的是允许包括任何儿童在内的元素被有效地跳过。 请注意,只有元素节点被传递给startElement
函数。
传递给startElement
进行过滤的元素节点将包含所有元素的属性,但不包括子节点。 元素可能还没有在正在构建的文档中(它可能没有父节点)。
startElement
过滤器函数可以访问或更改元素的属性。 更改名称空间声明不会影响解析器对名称空间的解析。
为了提高效率,如果节点被接受,传递给过滤器的元素节点可能与实际放置在树中的元素节点不同。 并且在读入和过滤文档的过程中可以重用实际节点(节点对象标识)。
Parameters | |
---|---|
elementArg |
Element : The newly encountered element. At the time this method is called, the element is incomplete - it will have its attributes, but no children. |
Returns | |
---|---|
short |
|