Module java.xml
Package org.w3c.dom.ls

Interface LSParserFilter


public interface LSParserFilter
LSParserFilter提供了应用程序在解析过程中检查节点的能力。在检查每个节点时,可以修改或移除节点,或者提前终止整个解析过程。

当解析器调用过滤器方法时,所有者文档和DOMImplementation对象已经存在并且可以访问。文档元素永远不会传递给LSParserFilter方法,即无法过滤掉文档元素。文档、文档类型、符号、实体和属性节点永远不会传递给过滤器上的acceptNode方法。如果参数"entities"设置为false,则会将EntityReference节点的子节点传递给过滤器。请注意,根据参数"entities"的描述,未展开的实体引用节点永远不会被丢弃,并且始终会传递给过滤器。

在解析文档时,所有有效性检查都发生在输入流中的源文档上,而不是在内存中构建的DOM文档上。通过过滤器,内存中的文档可能是流中文档的子集,并且其有效性可能受到过滤的影响。

当元素传递给过滤器方法时,所有默认属性必须存在于元素上。所有其他默认内容必须传递给过滤器方法。

DOM应用程序不得在过滤器中引发异常。从过滤器中抛出异常的影响取决于DOM实现。

另请参阅文档对象模型(DOM)级别3加载和保存规范

自:
1.5
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final short
    接受节点。
    static final short
    中断文档的正常处理。
    static final short
    拒绝节点及其子节点。
    static final short
    跳过此单个节点。
  • Method Summary

    Modifier and Type
    Method
    Description
    short
    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

      short startElement(Element elementArg)
      在扫描完每个Element开始标记之后,但在处理Element的其余部分之前,解析器将调用此方法。其目的是允许元素(包括任何子元素)被高效地跳过。请注意,只有元素节点会传递给startElement函数。
      传递给过滤器的元素节点将包括所有元素的属性,但不包括任何子节点。该元素可能尚未放置在正在构建的文档中(可能尚未具有父节点)。
      startElement过滤器函数可以访问或更改元素的属性。更改命名空间声明不会影响解析器的命名空间解析。
      为了效率起见,传递给过滤器的元素节点可能与实际放置在树中的节点不同(如果节点被接受)。实际节点(节点对象标识)在读取和过滤文档的过程中可能会被重用。
      参数:
      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的所有子节点替换。
      • FILTER_INTERRUPT如果过滤器希望停止处理文档。中断文档的处理不再保证生成的DOM树是XML格式良好的。该Node被接受并将是最后一个完全解析的节点。
    • getWhatToShow

      int getWhatToShow()
      告诉LSParser要显示哪些类型的节点给方法LSParserFilter.acceptNode。如果未使用此属性将节点显示给过滤器,则节点将自动包含在正在构建的DOM文档中。有关常量的定义,请参阅NodeFilter。这里使用的常量SHOW_ATTRIBUTESHOW_DOCUMENTSHOW_DOCUMENT_TYPESHOW_NOTATIONSHOW_ENTITYSHOW_DOCUMENT_FRAGMENT在此处无意义。这些节点永远不会传递给LSParserFilter.acceptNode
      这里使用的常量在[DOM级别2遍历和范围]中定义。