public class DefaultHandler2 extends DefaultHandler implements LexicalHandler, DeclHandler, EntityResolver2
LexicalHandler
, DeclHandler
和EntityResolver2
扩展。
除了覆盖原来的SAX1 resolveEntity()
方法,添加的处理程序方法只是返回。
子类可以逐个方法地覆盖所有内容。
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY.
注意:此类可能还会知道ContentHandler.setDocumentLocator()调用可能会传递一个Locator2
对象,并且ContentHandler.startElement()调用可能会传递一个Attributes2
对象。
Constructor and Description |
---|
DefaultHandler2()
构造一个忽略所有解析事件的处理程序。
|
Modifier and Type | Method and Description |
---|---|
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实体的开始。
|
characters, endDocument, endElement, endPrefixMapping, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, setDocumentLocator, skippedEntity, startDocument, startElement, startPrefixMapping, unparsedEntityDecl, warning
public void startCDATA() throws SAXException
LexicalHandler
复制
CDATA部分的内容将通过常规characters
事件报告; 此事件仅用于报告边界。
startCDATA
在界面
LexicalHandler
SAXException
- 应用程序可能会引发异常。
LexicalHandler.endCDATA()
public void endCDATA() throws SAXException
LexicalHandler
复制
endCDATA
在界面
LexicalHandler
SAXException
- 应用程序可能会引发异常。
LexicalHandler.startCDATA()
public void startDTD(String name, String publicId, String systemId) throws SAXException
LexicalHandler
复制
此方法用于报告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
- 应用程序可能会引发异常。
LexicalHandler.endDTD()
,
LexicalHandler.startEntity(java.lang.String)
public void endDTD() throws SAXException
LexicalHandler
复制
此方法用于报告DOCTYPE声明的结尾; 如果文档没有DOCTYPE声明,则不会调用此方法。
endDTD
在界面
LexicalHandler
SAXException
- 应用程序可能会引发异常。
LexicalHandler.startDTD(java.lang.String, java.lang.String, java.lang.String)
public void startEntity(String name) throws SAXException
LexicalHandler
复制
参数实体(包括外部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
- 应用程序可能会引发异常。
LexicalHandler.endEntity(java.lang.String)
,
DeclHandler.internalEntityDecl(java.lang.String, java.lang.String)
,
DeclHandler.externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)
public void endEntity(String name) throws SAXException
LexicalHandler
复制
endEntity
在界面
LexicalHandler
name
- 正在结束的实体的名称。
SAXException
- 应用程序可能会引发异常。
LexicalHandler.startEntity(java.lang.String)
public void comment(char[] ch, int start, int length) throws SAXException
LexicalHandler
复制
此回调将用于文档元素内部或外部的注释,包括外部DTD子集中的注释(如果已读)。 DTD中的注释必须正确嵌套在start / endDTD和start / endEntity事件(如果使用)中。
comment
在界面
LexicalHandler
ch
- 在注释中保存
ch
的数组。
start
- 数组中的起始位置。
length
- 要从数组使用的字符数。
SAXException
- 应用程序可能会引发异常。
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”)的字符串,如果不适用,则为空。
value
- 表示属性默认值的字符串,如果没有,则返回null。
SAXException
- 应用程序可能会引发异常。
public void elementDecl(String name, String model) throws SAXException
DeclHandler
复制
内容模型将由字符串“EMPTY”,字符串“ANY”或括号组组成,可选地后跟出现指示符。 模型将被归一化,以便所有参数实体完全解析,并且所有空格都被删除,并且将包括括号。 其他规范化(如删除冗余括号或简化事件指标)由解析器自行决定。
elementDecl
在界面
DeclHandler
name
- 元素类型名称。
model
- 内容模型为标准化字符串。
SAXException
- 应用程序可能会引发异常。
public void externalEntityDecl(String name, String publicId, String systemId) throws SAXException
DeclHandler
复制
只会报告每个实体的有效(第一)声明。
如果系统标识符是URL,解析器必须在将其传递给应用程序之前将其完全解析。
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)
public void internalEntityDecl(String name, String value) throws SAXException
DeclHandler
复制
只会报告每个实体的有效(第一)声明。 值中的所有参数实体将被扩展,但一般实体将不会。
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)
public InputSource getExternalSubset(String name, String baseURI) throws SAXException, IOException
getExternalSubset
在接口
EntityResolver2
name
- 标识文档根元素。
该名称来自DOCTYPE声明(如果可用)或实际根元素。
baseURI
- 文档的基本URI,作为选择外部子集的附加提示。
这总是一个绝对的URI,除非它是null,因为XMLReader没有一个InputSource。
SAXException
- 任何SAX异常,可能包装另一个异常。
IOException
- 可能表示无法创建新的InputStream或Reader或非法URL。
public InputSource resolveEntity(String name, String publicId, String baseURI, String systemId) throws SAXException, IOException
DefaultHandler.resolveEntity()
方法被覆盖以调用此方法,有时可以使用null 名称和baseURI调用此方法,并且将systemId已经绝对调用。
resolveEntity
在接口
EntityResolver2
name
- 标识正在解析的外部实体。
外部子集的“[dtd]”或以“%”开头的名称表示参数实体,或者是一般实体的名称。
当SAX2解析器调用时,这从不为空。
publicId
- 引用的外部实体的公共标识符(按照XML规范的要求进行规范化),如果没有提供,则为null。
baseURI
- 相对于哪个相对的系统ID进行解释的URI。
这绝对是一个绝对URI,除非它是null(可能是因为XMLReader没有一个InputSource)。
该URI由XML规范定义为与启动相关声明的“<”相关联的URI。
systemId
- 被引用的外部实体的系统标识符;
一个相对或绝对的URI。
当SAX2解析器调用时,这不会为空;
只有声明的实体和任何外部子集才能被这样的解析器解析。
SAXException
- 任何SAX异常,可能包装另一个异常。
IOException
- 可能表示无法创建新的InputStream或Reader或非法URL。
public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
EntityResolver2.resolveEntity()
。
您只需要覆盖该方法即可使用此类。
resolveEntity
在接口
EntityResolver
resolveEntity
在类别
DefaultHandler
publicId
- 公共标识符,如果没有可用,则为null。
systemId
- XML文档中提供的系统标识符。
SAXException
- 任何SAX异常,可能包含另一个异常。
IOException
- Java特定的IO异常,可能是为InputSource创建一个新的InputStream或Reader。
EntityResolver.resolveEntity(java.lang.String, java.lang.String)
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.