- java.lang.Object
-
- org.xml.sax.helpers.DefaultHandler
-
- org.xml.sax.ext.DefaultHandler2
-
- All Implemented Interfaces:
-
ContentHandler,DTDHandler,EntityResolver,ErrorHandler,DeclHandler,EntityResolver2,LexicalHandler
public class DefaultHandler2 extends DefaultHandler implements LexicalHandler, DeclHandler, EntityResolver2
此类扩展SAX2基本处理程序类,以支持SAX2LexicalHandler,DeclHandler,并EntityResolver2扩展。 除了覆盖原来的SAX1resolveEntity()方法,添加的处理程序方法只是返回。 子类可以逐个方法地覆盖所有内容。This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY.
注意:此类可能还会知道ContentHandler.setDocumentLocator()调用可能传递一个
Locator2对象,并且ContentHandler.startElement()调用可能会传递一个Attributes2对象。- 从以下版本开始:
- 1.5,SAX 2.0(扩展1.1 alpha)
-
-
构造方法摘要
构造方法 Constructor 描述 DefaultHandler2()构造一个忽略所有解析事件的处理程序。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 voidattributeDecl(String eName, String aName, String type, String mode, String value)报告属性类型声明。voidcomment(char[] ch, int start, int length)在文档的任何位置报告XML注释。voidelementDecl(String name, String model)报告元素类型声明。voidendCDATA()报告CDATA部分的结尾。voidendDTD()报告DTD声明的结尾。voidendEntity(String name)报告实体的结束。voidexternalEntityDecl(String name, String publicId, String systemId)报告被解析的外部实体声明。InputSourcegetExternalSubset(String name, String baseURI)告诉解析器,如果在文档文本中没有声明外部子集,则不应使用任何外部子集。voidinternalEntityDecl(String name, String value)报告内部实体声明。InputSourceresolveEntity(String publicId, String systemId)使用null实体名称和基本URI调用EntityResolver2.resolveEntity()。InputSourceresolveEntity(String name, String publicId, String baseURI, String systemId)告诉解析器根据baseURI解析systemId,并从该结果的绝对URI中读取实体文本。voidstartCDATA()报告CDATA部分的开始。voidstartDTD(String name, String publicId, String systemId)报告DTD声明的开始,如果有的话。voidstartEntity(String name)报告一些内部和外部XML实体的开始。-
Methods inherited from class org.xml.sax.helpers.DefaultHandler
characters, endDocument, endElement, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping, unparsedEntityDecl, warning
-
-
-
-
方法详细信息
-
startCDATA
public void startCDATA() throws SAXException描述从接口LexicalHandler复制报告CDATA部分的开始。CDATA部分的内容将通过常规
characters事件报告; 此事件仅用于报告边界。- Specified by:
-
startCDATA在接口LexicalHandler - 异常
-
SAXException- 应用程序可能会引发异常。 - 另请参见:
-
LexicalHandler.endCDATA()
-
endCDATA
public void endCDATA() throws SAXException说明从接口LexicalHandler复制报告CDATA部分的结尾。- Specified by:
-
endCDATA在接口LexicalHandler - 异常
-
SAXException- 应用程序可能会引发异常。 - 另请参见:
-
LexicalHandler.startCDATA()
-
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事件之前。- Specified by:
-
startDTD在接口LexicalHandler - 参数
-
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声明,则不会调用此方法。
- Specified by:
-
endDTD在接口LexicalHandler - 异常
-
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驱动程序提供这些事件时,所有其他事件必须正确嵌套在开始/结束实体事件中。 没有额外的要求从
DeclHandler或DTDHandler的事件正确订购。请注意,跳过的实体将通过
skippedEntity事件进行报告,这是ContentHandler界面的一部分。由于SAX使用的流媒体事件模型,在任何情况下都不能报告某些实体边界:
- 属性值内的一般实体
- 声明中的参数实体
这些将被默默地扩大,没有指示原始实体边界在哪里。
还要注意,不会报告字符引用的边界(这不是真正的实体)。
所有的start / endEntity事件必须正确嵌套。
- Specified by:
-
startEntity在接口LexicalHandler - 参数
-
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复制报告实体的结束。- Specified by:
-
endEntity在接口LexicalHandler - 参数
-
name- 正在结束的实体的名称。 - 异常
-
SAXException- 应用程序可能会引发异常。 - 另请参见:
-
LexicalHandler.startEntity(java.lang.String)
-
comment
public void comment(char[] ch, int start, int length) throws SAXException描述从接口LexicalHandler复制在文档的任何位置报告XML注释。此回调将用于文档元素内部或外部的注释,包括外部DTD子集中的注释(如果已读)。 DTD中的注释必须正确嵌套在start / endDTD和start / endEntity事件(如果使用)中。
- Specified by:
-
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”后跟一个空格,后跟一个带有所有空格的括号符号组。
该值将是应用程序报告的值,适当地规范化,扩展了实体和字符引用。
- Specified by:
-
attributeDecl接口DeclHandler - 参数
-
eName- 关联元素的名称。 -
aName- 属性的名称。 -
type- 表示属性类型的字符串。 -
mode- 表示属性默认模式(“#IMPLIED”,“#REQUIRED”或“#FIXED”)的字符串,如果不适用,则为空。 -
value- 表示属性默认值的字符串,如果没有,则返回null。 - 异常
-
SAXException- 应用程序可能会引发异常。
-
elementDecl
public void elementDecl(String name, String model) throws SAXException
描述从接口DeclHandler复制报告元素类型声明。内容模型将由字符串“EMPTY”,字符串“ANY”或括号组组成,可选地后跟出现指示符。 模型将被归一化,以便所有参数实体完全解析,并且所有空格都被删除,并且将包括括号。 其他规范化(如删除冗余括号或简化事件指标)由解析器自行决定。
- Specified by:
-
elementDecl在接口DeclHandler - 参数
-
name- 元素类型名称。 -
model- 内容模型为标准化字符串。 - 异常
-
SAXException- 应用程序可能会引发异常。
-
externalEntityDecl
public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException
描述从接口DeclHandler复制报告被解析的外部实体声明。只会报告每个实体的有效(第一)声明。
如果系统标识符是URL,解析器必须在将其传递给应用程序之前将其完全解析。
- Specified by:
-
externalEntityDecl在接口DeclHandler - 参数
-
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复制报告内部实体声明。只会报告每个实体的有效(第一)声明。 值中的所有参数实体将被扩展,但一般实体将不会。
- Specified by:
-
internalEntityDecl在接口DeclHandler - 参数
-
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
告诉解析器,如果在文档文本中没有声明外部子集,则不应使用任何外部子集。- Specified by:
-
getExternalSubset在接口EntityResolver2 - 参数
-
name- 标识文档根元素。 该名称来自DOCTYPE声明(如果可用)或实际根元素。 -
baseURI- 文档的基本URI,作为选择外部子集的附加提示。 这总是一个绝对URI,除非它是null,因为XMLReader没有一个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 名称和baseURI调用此方法,并且将systemId已经绝对调用。- Specified by:
-
resolveEntity在接口EntityResolver2 - 参数
-
name- 标识正在解析的外部实体。 外部子集的“[dtd]”或以“%”开头的名称表示参数实体,或者是一般实体的名称。 当SAX2解析器调用时,这从不为空。 -
publicId- 引用的外部实体的公共标识符(按照XML规范的要求进行规范化),如果没有提供,则为null。 -
baseURI- 相对于哪个相对的系统ID进行解释的URI。 这绝对是一个绝对URI,除非它是null(可能是因为XMLReader没有一个InputSource)。 该URI由XML规范定义为与“<”启动相关声明相关联的URI。 -
systemId- 被引用的外部实体的系统标识符; 一个相对或绝对的URI。 当SAX2解析器调用时,这不会为空; 只有声明的实体和任何外部子集才能被这样的解析器解析。 - 结果
- 描述由解析器使用的新输入源的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()。 您只需要覆盖该方法即可使用此类。- Specified by:
-
resolveEntity在接口EntityResolver - 重写:
-
resolveEntity在DefaultHandler - 参数
-
publicId- 公共标识符,如果没有可用,则为null。 -
systemId- XML文档中提供的系统标识符。 - 结果
- 新的输入源,或null,以要求默认行为。
- 异常
-
SAXException- 任何SAX异常,可能包括另一个异常。 -
IOException- 如果设置新输入源时出现错误。 - 另请参见:
-
EntityResolver.resolveEntity(java.lang.String, java.lang.String)
-
-