- 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 方法 描述 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实体的开始。-
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)
-
-