Module  java.xml
软件包  org.w3c.dom.ls

Interface LSParserFilter



  • public interface LSParserFilter
    LSParserFilter提供应用程序在分析时正在构造时检查节点的能力。 当每个节点被检查时,它可以被修改或去除,或者整个解析可以被提前终止。

    在解析器调用任何一种过滤方法时,所有者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
    • 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_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的属性,但不包括子节点。 元素可能尚未在正在构造的文档中就位(可能没有父节点)。
        A 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的孩子所Node
        • FILTER_INTERRUPT如果过滤器想要停止文档的处理。 中断文档的处理不再保证生成的DOM树是XML格式正确的。 Node被接受,将是最后一个完全解析的节点。
      • getWhatToShow

        int getWhatToShow​()
        告诉LSParser方法LSParserFilter.acceptNode显示什么类型的节点。 如果节点没有显示给使用此属性的过滤器,则会自动将其包含在正在构建的DOM文档中。 有关NodeFilter的定义,请参阅NodeFilter 常量SHOW_ATTRIBUTESHOW_DOCUMENTSHOW_DOCUMENT_TYPESHOW_NOTATIONSHOW_ENTITY ,并SHOW_DOCUMENT_FRAGMENT是没有意义的位置。 那些节点永远不会传递给LSParserFilter.acceptNode
        这里使用的常数在[ DOM Level 2 Traversal and Range ]中定义。