org.xml.sax.ext

接口
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 扩展。除了重写原始 SAX1 resolveEntity() 方法之外,仅返回添加的处理程序方法。子类可能在逐个方法的基础上重写每个事情。

此模块(包括源代码和文档)在公共域中,同时 没有担保

注:此类可能仍知道 ContentHandler.setDocumentLocator() 调用可能被传递一个 Locator2 对象,并且 ContentHandler.startElement() 调用被传递一个 Attributes2 对象。

从以下版本开始:
SAX 2.0 (extensions 1.1 alpha)

构造方法摘要
DefaultHandler2()
          构造忽略所有解析事件的处理程序。
 
方法摘要
 void attributeDecl(String eName, String aName, String type, String mode, String value)
          报告属性类型声明。
 void comment(char[] ch, int start, int length)
          报告文档的任何位置的 XML 注释。
 void elementDecl(String name, String model)
          报告元素类型声明。
 void endCDATA()
          报告 CDATA 节的结束。
 void endDTD()
          报告 DTD 声明的结束。
 void endEntity(String name)
          报告实体的结束。
 void externalEntityDecl(String name, String publicId, String systemId)
          报告解析的外部实体声明。
 InputSource getExternalSubset(String name, String baseURI)
          告知解析器如果在文档文本中没有声明任何外部子集,则不应使用任何外部子集。
 void internalEntityDecl(String name, String value)
          报告内部实体声明。
 InputSource resolveEntity(String publicId, String systemId)
          使用 null 实体名称和基 URI 调用 EntityResolver2.resolveEntity()
 InputSource resolveEntity(String name, String publicId, String baseURI, String systemId)
          告知解析器根据 baseURI 解析 systemId,并从产生的绝对 URI 读取实体文本。
 void startCDATA()
          报告 CDATA 节的开始。
 void startDTD(String name, String publicId, String systemId)
          报告 DTD 声明的开始(如果存在)。
 void startEntity(String name)
          报告一些内部和外部 XML 实体的开始。
 
从类 org.xml.sax.helpers.DefaultHandler 继承的方法
characters, endDocument, endElement, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping, unparsedEntityDecl, warning
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

DefaultHandler2

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

方法详细信息

startCDATA

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

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

指定者:
接口 LexicalHandler 中的 startCDATA
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
LexicalHandler.endCDATA()

endCDATA

public void endCDATA()
              throws SAXException
从接口 LexicalHandler 复制的描述
报告 CDATA 节的结束。

指定者:
接口 LexicalHandler 中的 endCDATA
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
LexicalHandler.startCDATA()

startDTD

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

此方法主要用于报告 DOCTYPE 声明的开始;如果文档没有任何 DOCTYPE 声明,则不调用此方法。

通过 DTDHandlerDeclHandler 事件报告的所有声明必须在 startDTD 和 endDTD 事件之间出现。可以假设声明属于内部 DTD 子集,除非它们在 startEntityendEntity 事件之间出现。也应该在 startDTD 和 endDTD 事件之间,以事件出现的原始顺序(逻辑)报告 DTD 的注释和处理指令;但是,它们不需要出现在相对于 DTDHandler 或 DeclHandler 事件的正确位置。

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

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

endDTD

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

此方法主要用于报告 DOCTYPE 声明的结束;如果文档没有任何 DOCTYPE 声明,则不调用此方法。

指定者:
接口 LexicalHandler 中的 endDTD
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
LexicalHandler.startDTD(java.lang.String, java.lang.String, java.lang.String)

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 驱动程序提供这些事件时,所有其他事件必须在开始/结束实体事件中正确嵌套。不存在对来自 DeclHandlerDTDHandler 的事件进行正确排序的 附加要求。

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

由于 SAX 使用的流事件模型,不能在任何环境下报告某些实体边界:

  • 属性值中的常规实体
  • 声明中的参数实体

将默认扩展上述实体,而不指示原始实体边界的位置。

还要注意,不报告字符引用(实际上它不是实体)的边界。

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

指定者:
接口 LexicalHandler 中的 startEntity
参数:
name - 实体的名称。如果是参数实体,则名称将以 "%" 开头,如果是外部 DTD 子集,则将是 "[dtd]"。
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
LexicalHandler.endEntity(java.lang.String), DeclHandler.internalEntityDecl(java.lang.String, java.lang.String), DeclHandler.externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)

endEntity

public void endEntity(String name)
               throws SAXException
从接口 LexicalHandler 复制的描述
报告实体的结束。

指定者:
接口 LexicalHandler 中的 endEntity
参数:
name - 正在结束的实体名称。
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
LexicalHandler.startEntity(java.lang.String)

comment

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

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

指定者:
接口 LexicalHandler 中的 comment
参数:
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"。

值将是报告给应用程序、被适当标准化的值,它带有实体和扩展的字符引用。

指定者:
接口 DeclHandler 中的 attributeDecl
参数:
eName - 关联元素的名称。
aName - 属性的名称。
type - 表示属性类型的字符串。
mode - 表示属性默认模式("#IMPLIED"、"#REQUIRED" 或 "#FIXED")的字符串,如果不应用上述模式,则为 null。
value - 表示属性的默认值的字符串,如果不存在,则为 null。
抛出:
SAXException - 应用程序可能引发一个异常。

elementDecl

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

内容模型将由字符串 "EMPTY"、字符串 "ANY" 或用括号括起来的组组成,可以选择后面跟随一个出现指示符。将使模型标准化,以便完全解析所有的参数实体,并移除所有的空白,并将包括括号。其他标准化(例如,移除多余的括号或简化出现指示符)是由解析器决定的。

指定者:
接口 DeclHandler 中的 elementDecl
参数:
name - 元素类型名称。
model - 作为标准化字符串的内容模型。
抛出:
SAXException - 应用程序可能引发一个异常。

externalEntityDecl

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

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

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

指定者:
接口 DeclHandler 中的 externalEntityDecl
参数:
name - 实体的名称。如果是参数实体,则名称以 "%" 开头。
publicId - 实体的公共标识符,如果没有给定,则为 null。
systemId - 实体的系统标识符。
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
DeclHandler.internalEntityDecl(java.lang.String, java.lang.String), DTDHandler.unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)

internalEntityDecl

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

将仅报告每个实体的有效(第一个)声明。将扩展值中的所有参数实体,但不扩展常规实体。

指定者:
接口 DeclHandler 中的 internalEntityDecl
参数:
name - 实体的名称。如果是参数实体,则名称以 "%" 开头。
value - 实体的替换文本。
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
DeclHandler.externalEntityDecl(java.lang.String, java.lang.String, java.lang.String), DTDHandler.unparsedEntityDecl(java.lang.String, java.lang.String, java.lang.String, java.lang.String)

getExternalSubset

public InputSource getExternalSubset(String name,
                                     String baseURI)
                              throws SAXException,
                                     IOException
告知解析器如果在文档文本中没有声明任何外部子集,则不应使用任何外部子集。

指定者:
接口 EntityResolver2 中的 getExternalSubset
参数:
name - 标识文档根元素。此名称来自 DOCTYPE 声明(如果可用),或来自实际的根元素。
baseURI - 文档的基 URI,充当选择外部子集的附加提示。这总是一个绝对 URI,除非由于向 XMLReader 提供了一个不带 URI 的 InputSource 而使它为 null 时。
返回:
描述解析器使用的新外部子集的 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 名称baseURI 以及已经绝对化的 systemId 调用此方法。

指定者:
接口 EntityResolver2 中的 resolveEntity
参数:
name - 标识正被解析的外部实体。外部子集的 "[dtd]",或者以 "%" 开头用来指示参数实体的名称,或者常规实体的名称。在由 SAX2 解析器调用时,它永不能为 null。
publicId - 被引用的外部实体的公共标识符(按照 XML 规范的要求标准化),如果不提供任何内容,则为 null。
baseURI - 关于解释哪个相对 systemID 的 URI。这总是一个绝对 URI,除非它为 null(可能因为向 XMLReader 提供了一个不带 URI 的 InputSource)。XML 规范定义了此 URI,它是与开始相关声明的 "<" 相关联的 URI。
systemId - 引用的外部实体的系统标识符;相对 URI 或绝对 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
使用 null 实体名称和基 URI 调用 EntityResolver2.resolveEntity()。为使用此类,只需重写该方法。

指定者:
接口 EntityResolver 中的 resolveEntity
覆盖:
DefaultHandler 中的 resolveEntity
参数:
publicId - 公共标识符,如果没有可用的,则为 null。
systemId - 在 XML 文档中提供的系统标识符。
返回:
新的输入源,或返回 null,以要求默认的行为。
抛出:
SAXException - 任何 SAX 异常,可能包装另外的异常。
IOException - 特定于 Java 的 IO 异常,可能是由于为 InputSource 创建新的 InputStream 或 Reader 所导致的。
另请参见:
EntityResolver.resolveEntity(java.lang.String, java.lang.String)