模块 java.xml

类 DefaultHandler2

java.lang.Object
org.xml.sax.helpers.DefaultHandler
org.xml.sax.ext.DefaultHandler2
所有已实现的接口:
ContentHandler , DTDHandler , EntityResolver , ErrorHandler , DeclHandler , EntityResolver2 , LexicalHandler

public class DefaultHandler2 extends DefaultHandler implements LexicalHandler , DeclHandler , EntityResolver2
此类扩展 SAX2 基本处理程序类以支持 SAX2 LexicalHandler DeclHandler EntityResolver2 扩展。除了覆盖原始 SAX1 resolveEntity() 方法之外,添加的处理程序方法只是返回。子类可以逐个方法地覆盖所有内容。

Note: 此类可能还知道 ContentHandler.setDocumentLocator() 调用可能会传递一个 Locator2 对象,而 ContentHandler.startElement() 调用可能会传递一个 Attributes2 对象。

自从:
1.5、SAX 2.0(扩展 1.1 alpha)
  • 构造方法详细信息

    • DefaultHandler2

      public DefaultHandler2()
      构造一个忽略所有解析事件的处理程序。
  • 方法详情

    • startCDATA

      public void startCDATA() throws SAXException
      从接口 LexicalHandler 复制的描述
      报告 CDATA 部分的开始。

      CDATA部分的内容将通过常规characters 事件报告;此事件仅用于报告边界。

      指定者:
      startCDATA 在接口 LexicalHandler
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • endCDATA

      public void endCDATA() throws SAXException
      从接口 LexicalHandler 复制的描述
      报告 CDATA 部分的结尾。
      指定者:
      endCDATA 在接口 LexicalHandler
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • startDTD

      public void startDTD(String  name, String  publicId, String  systemId) throws SAXException
      从接口 LexicalHandler 复制的描述
      报告 DTD 声明的开始,如果有的话。

      此方法旨在报告 DOCTYPE 声明的开始;如果文档没有 DOCTYPE 声明,则不会调用此方法。

      通过 DTDHandler DeclHandler 事件报告的所有声明必须出现在 startDTD 和 endDTD 事件之间。假定声明属于内部 DTD 子集,除非它们出现在 startEntity endEntity 事件之间。来自 DTD 的注释和处理指令也应该在 startDTD 和 endDTD 事件之间按照它们最初的(逻辑)发生顺序进行报告;但是,它们不需要出现在与 DTDHandler 或 DeclHandler 事件相关的正确位置。

      请注意,start/endDTD 事件将出现在来自 ContentHandler 的 start/endDocument 事件中,并出现在第一个 startElement 事件之前。

      指定者:
      startDTD 在接口 LexicalHandler
      参数:
      name - 文档类型名称。
      publicId - 外部 DTD 子集的已声明公共标识符,如果未声明则为 null。
      systemId - 外部 DTD 子集的已声明系统标识符,如果未声明则为 null。 (请注意,这不是根据文档基 URI 解析的。)
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • endDTD

      public void endDTD() throws SAXException
      从接口 LexicalHandler 复制的描述
      报告 DTD 声明的结束。

      此方法旨在报告 DOCTYPE 声明的结束;如果文档没有 DOCTYPE 声明,则不会调用此方法。

      指定者:
      endDTD 在接口 LexicalHandler
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • startEntity

      public void startEntity(String  name) throws SAXException
      从接口 LexicalHandler 复制的描述
      报告一些内部和外部 XML 实体的开始。

      参数实体(包括外部 DTD 子集)的报告是可选的,报告 LexicalHandler 事件的 SAX2 驱动程序可能不会实现它;您可以使用http://xml.org/sax/features/lexical-handler/parameter-entities 功能来查询或控制参数实体的报告。

      一般实体用它们的常规名称报告,参数实体在名称前加上“%”,外部 DTD 子集有伪实体名称“[dtd]”。

      当 SAX2 驱动程序提供这些事件时,所有其他事件必须正确嵌套在开始/结束实体事件中。没有额外要求来自 DeclHandler DTDHandler 的事件被正确排序。

      请注意,跳过的实体将通过 skippedEntity 事件报告,该事件是 ContentHandler 接口的一部分。

      由于 SAX 使用的流式事件模型,某些实体边界在任何情况下都无法报告:

      • 属性值中的一般实体
      • 声明中的参数实体

      这些将被悄无声息地扩展,没有迹象表明原始实体边界在哪里。

      另请注意,不报告字符引用的边界(无论如何都不是真正的实体)。

      所有 start/endEntity 事件都必须正确嵌套。

      指定者:
      startEntity 在接口 LexicalHandler
      参数:
      name - 实体的名称。如果是参数实体,名称将以'%'开头,如果是外部DTD子集,则为“[dtd]”。
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • endEntity

      public void endEntity(String  name) throws SAXException
      从接口 LexicalHandler 复制的描述
      报告实体的结束。
      指定者:
      endEntity 在接口 LexicalHandler
      参数:
      name - 结束的实体名称。
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • comment

      public void comment(char[] ch, int start, int length) throws SAXException
      从接口 LexicalHandler 复制的描述
      在文档中的任意位置报告 XML 注解。

      此回调将用于文档元素内部或外部的注释,包括外部 DTD 子集中的注释(如果已读取)。 DTD 中的注释必须正确嵌套在 start/endDTD 和 start/endEntity 事件(如果使用)中。

      指定者:
      comment 在接口 LexicalHandler
      参数:
      ch - 包含评论中字符的数组。
      start - 数组中的起始位置。
      length - 数组中要使用的字符数。
      抛出:
      SAXException - 应用程序可能会引发异常。
    • attributeDecl

      public void attributeDecl(String  eName, String  aName, String  type, String  mode, String  value) throws SAXException
      从接口 DeclHandler 复制的描述
      报告属性类型声明。

      只会报告属性的有效(第一个)声明。类型将是字符串“CDATA”、“ID”、“IDREF”、“IDREFS”、“NMTOKEN”、“NMTOKENS”、“ENTITY”、“ENTITIES”中的一种,带分隔符“|”的括号标记组并删除所有空格,或者单词“NOTATION”后跟一个空格,然后是括号内的标记组,并删除所有空格。

      该值将是向应用程序报告的值,经过适当规范化并扩展了实体和字符引用。

      指定者:
      attributeDecl 在接口 DeclHandler
      参数:
      eName - 关联元素的名称。
      aName - 属性的名称。
      type - 表示属性类型的字符串。
      mode - 表示属性默认模式(“#IMPLIED”、“#REQUIRED”或“#FIXED”)的字符串,如果这些都不适用,则为 null。
      value - 表示属性默认值的字符串,如果没有则为 null。
      抛出:
      SAXException - 应用程序可能会引发异常。
    • elementDecl

      public void elementDecl(String  name, String  model) throws SAXException
      从接口 DeclHandler 复制的描述
      报告元素类型声明。

      内容模型将由字符串“EMPTY”、字符串“ANY”或带括号的组组成,后跟一个出现指示符(可选)。模型将被规范化,以便所有参数实体都被完全解析并删除所有空格,并将包括封闭的括号。其他规范化(例如删除多余的括号或简化出现指示符)由解析器自行决定。

      指定者:
      elementDecl 在接口 DeclHandler
      参数:
      name - 元素类型名称。
      model - 作为规范化字符串的内容模型。
      抛出:
      SAXException - 应用程序可能会引发异常。
    • externalEntityDecl

      public void externalEntityDecl(String  name, String  publicId, String  systemId) throws SAXException
      从接口 DeclHandler 复制的描述
      报告已解析的外部实体声明。

      仅报告每个实体的有效(第一个)声明。

      如果系统标识符是一个 URL,解析器必须在将它传递给应用程序之前完全解析它。

      指定者:
      externalEntityDecl 在接口 DeclHandler
      参数:
      name - 实体的名称。如果它是参数实体,名称将以“%”开头。
      publicId - 实体的公共标识符,如果没有给出则为 null。
      systemId - 实体的系统标识符。
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • internalEntityDecl

      public void internalEntityDecl(String  name, String  value) throws SAXException
      从接口 DeclHandler 复制的描述
      报告内部实体声明。

      仅报告每个实体的有效(第一个)声明。值中的所有参数实体都会展开,但一般实体不会。

      指定者:
      internalEntityDecl 在接口 DeclHandler
      参数:
      name - 实体的名称。如果它是参数实体,名称将以“%”开头。
      value - 实体的替换文本。
      抛出:
      SAXException - 应用程序可能会引发异常。
      参见:
    • getExternalSubset

      public InputSource  getExternalSubset(String  name, String  baseURI) throws SAXException , IOException
      告诉解析器如果文档文本中没有声明外部子集,则不应使用任何外部子集。
      指定者:
      getExternalSubset 在接口 EntityResolver2
      参数:
      name - 标识文档根元素。此名称来自 DOCTYPE 声明(如果可用)或实际的根元素。
      baseURI - 文档的基本 URI,作为选择外部子集的附加提示。这始终是一个绝对 URI,除非它是空的,因为 XMLReader 被赋予了一个没有 InputSource 的 InputSource。
      返回:
      描述解析器要使用的新外部子集的 InputSource 对象,或者为 null 以指示未提供外部子集。
      抛出:
      SAXException - 任何 SAX 异常,可能包装另一个异常。
      IOException - 可能表示无法创建新的 InputStream 或 Reader,或非法 URL。
    • resolveEntity

      public InputSource  resolveEntity(String  name, String  publicId, String  baseURI, String  systemId) throws SAXException , IOException
      告诉解析器根据 baseURI 解析 systemId 并从生成的绝对 URI 中读取实体文本。请注意,由于较旧的 DefaultHandler.resolveEntity() 方法被覆盖以调用此方法,因此有时可能会使用 null namebaseURI 以及已绝对化的 systemId 调用此方法。
      指定者:
      resolveEntity 在接口 EntityResolver2
      参数:
      name - 标识正在解析的外部实体。 “[dtd]”表示外部子集,或者以“%”开头的名称表示参数实体,或者是一般实体的名称。当由 SAX2 解析器调用时,这永远不会为 null。
      publicId - 被引用的外部实体的公共标识符(根据 XML 规范的要求进行规范化),如果未提供则为 null。
      baseURI - 解释相对 systemID 的 URI。这始终是一个绝对 URI,除非它为 null(可能是因为 XMLReader 被赋予了一个没有 InputSource 的 InputSource)。此 URI 由 XML 规范定义为与开始相关声明的“<”相关联的 URI。
      systemId - 被引用的外部实体的系统标识符;相对或绝对 URI。当由 SAX2 解析器调用时,这永远不会为 null;这样的解析器只解析声明的实体和任何外部子集。
      返回:
      描述解析器要使用的新输入源的 InputSource 对象。返回 null 会指示解析器根据基本 URI 解析系统 ID,并打开到结果 URI 的连接。
      抛出:
      SAXException - 任何 SAX 异常,可能包装另一个异常。
      IOException - 可能表示无法创建新的 InputStream 或 Reader,或非法 URL。
    • resolveEntity

      public InputSource  resolveEntity(String  publicId, String  systemId) throws SAXException , IOException
      使用空实体名称和基本 URI 调用 EntityResolver2.resolveEntity() 。您只需覆盖该方法即可使用此类。
      指定者:
      resolveEntity 在接口 EntityResolver
      重写:
      resolveEntity 在类 DefaultHandler
      参数:
      publicId - 公共标识符,如果没有可用标识符则为 null。
      systemId - XML 文档中提供的系统标识符。
      返回:
      新的输入源,或 null 以要求默认行为。
      抛出:
      SAXException - 任何 SAX 异常,可能包装另一个异常。
      IOException - 如果设置新输入源时出错。
      参见: