模块  java.xml
软件包  org.w3c.dom.ls

Interface LSParserFilter


  • public interface LSParserFilter
    LSParserFilter s为应用程序提供了在解析时构建节点时检查节点的能力。 在检查每个节点时,可以修改或删除它,或者可以提前终止整个解析。

    在解析器调用任何过滤器方法时,所有者Document和DOMImplementation对象都存在且可访问。 文档元素永远不会传递给LSParserFilter方法,即无法过滤掉文档元素。 DocumentDocumentTypeNotationEntity ,和Attr节点不会传递至acceptNode在过滤器上的方法。 如果参数“ entities ”设置为false ,则会将EntityReference节点的子节点传递给过滤器。 请注意,如参数“ entities ”所述,未展开的实体引用节点永远不会被丢弃,并始终传递给过滤器。

    解析文档时的所有有效性检查都发生在源文档上,因为它出现在输入流上,而不是在DOM文档上,因为它是内置的。 使用过滤器,内存中的文档可能是流上文档的子集,其有效性可能已受到过滤的影响。

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

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

    另见Document Object Model (DOM) Level 3 Load and Save Specification

    从以下版本开始:
    1.5
    • 方法摘要

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      short acceptNode​(Node nodeArg)
      解析器在完成每个节点的解析时将调用此方法。
      int getWhatToShow()
      告诉 LSParser向方法 LSParserFilter.acceptNode显示哪些类型的节点。
      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节点可能与接受节点时实际放置在树中的节点不同。 并且在读入和过滤文档的过程中可以重用实际节点(节点对象标识)。
        参数
        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的定义,请参见NodeFilter 常量SHOW_ATTRIBUTESHOW_DOCUMENTSHOW_DOCUMENT_TYPESHOW_NOTATIONSHOW_ENTITYSHOW_DOCUMENT_FRAGMENT是没有意义在这里。 这些节点永远不会传递给LSParserFilter.acceptNode
        这里使用的常数在[ DOM Level 2 Traversal and Range ]中定义。