Module java.xml
Package org.xml.sax.ext

Class 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的LexicalHandlerDeclHandlerEntityResolver2扩展。除了覆盖原始的SAX1resolveEntity()方法外,添加的处理程序方法只是返回。子类可以逐个方法地覆盖所有内容。

注意: 该类可能会了解到ContentHandler.setDocumentLocator()调用可能会传递一个Locator2对象,以及ContentHandler.startElement()调用可能会传递一个Attributes2对象。

自版本:
1.5, SAX 2.0 (扩展 1.1 alpha)
  • Constructor Details

    • DefaultHandler2

      public DefaultHandler2()
      构造一个忽略所有解析事件的处理程序。
  • Method Details

    • 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声明,则不会调用此方法。

      通过DTDHandlerDeclHandler事件报告的所有声明必须出现在startDTD和endDTD事件之间。假定声明属于内部DTD子集,除非它们出现在startEntityendEntity事件之间。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驱动程序提供这些事件时,所有其他事件必须正确嵌套在start/end实体事件内。没有额外要求要求来自DeclHandlerDTDHandler的事件必须正确排序。

      请注意,跳过的实体将通过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,除非为null,因为XMLReader没有给定一个带有绝对URI的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()方法被覆盖以调用此方法,因此有时可能会使用空的namebaseURI以及已经绝对化的systemId来调用此方法。
      指定者:
      resolveEntity 在接口 EntityResolver2
      参数:
      name - 标识正在解析的外部实体。对于外部子集,可以是"[dtd]",或以"%"开头表示参数实体,或者是一般实体的名称。当被SAX2解析器调用时,永远不会为空。
      publicId - 外部实体的公共标识符(根据XML规范要求进行了规范化),如果没有提供,则为null。
      baseURI - 相对于其解释相对systemIDs的URI。这始终是绝对URI,除非为null(可能是因为XMLReader没有提供一个)。该URI由XML规范定义为与开始相关声明的"<"相关联的URI。
      systemId - 正在引用的外部实体的系统标识符;可以是相对或绝对URI。当被SAX2解析器调用时,永远不会为空;只有声明的实体和任何外部子集才会被这种解析器解析。
      返回:
      描述解析器要使用的新输入源的InputSource对象。返回null会指示解析器根据baseURI解析系统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 - 如果设置新输入源时出现错误。
      参见: