- 所有已实现的接口:
ContentHandler
,DTDHandler
,EntityResolver
,ErrorHandler
,DeclHandler
,EntityResolver2
,LexicalHandler
LexicalHandler
、DeclHandler
和 EntityResolver2
扩展。除了覆盖原始 SAX1 resolveEntity()
方法之外,添加的处理程序方法只是返回。子类可以逐个方法地覆盖所有内容。
Note: 此类可能还知道 ContentHandler.setDocumentLocator() 调用可能会传递一个 Locator2
对象,而 ContentHandler.startElement() 调用可能会传递一个 Attributes2
对象。
- 自从:
- 1.5、SAX 2.0(扩展 1.1 alpha)
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述void
报告属性类型声明。void
comment
(char[] ch, int start, int length) 在文档中的任意位置报告 XML 注解。void
elementDecl
(String name, String model) 报告元素类型声明。void
endCDATA()
报告 CDATA 部分的结尾。void
endDTD()
报告 DTD 声明的结束。void
报告实体的结束。void
externalEntityDecl
(String name, String publicId, String systemId) 报告已解析的外部实体声明。getExternalSubset
(String name, String baseURI) 告诉解析器如果文档文本中没有声明外部子集,则不应使用任何外部子集。void
internalEntityDecl
(String name, String value) 报告内部实体声明。resolveEntity
(String publicId, String systemId) 使用空实体名称和基本 URI 调用EntityResolver2.resolveEntity()
。resolveEntity
(String name, String publicId, String baseURI, String systemId) 告诉解析器根据 baseURI 解析 systemId 并从生成的绝对 URI 中读取实体文本。void
报告 CDATA 部分的开始。void
报告 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
在接口 org.xml.sax.ContentHandler 中声明的方法
declaration
-
构造方法详细信息
-
DefaultHandler2
public DefaultHandler2()构造一个忽略所有解析事件的处理程序。
-
-
方法详情
-
startCDATA
从接口LexicalHandler
复制的描述报告 CDATA 部分的开始。CDATA部分的内容将通过常规
characters
事件报告;此事件仅用于报告边界。- 指定者:
startCDATA
在接口LexicalHandler
中- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
endCDATA
从接口LexicalHandler
复制的描述报告 CDATA 部分的结尾。- 指定者:
endCDATA
在接口LexicalHandler
中- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
startDTD
从接口LexicalHandler
复制的描述报告 DTD 声明的开始,如果有的话。此方法旨在报告 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
- 应用程序可能会引发异常。- 参见:
-
endDTD
从接口LexicalHandler
复制的描述报告 DTD 声明的结束。此方法旨在报告 DOCTYPE 声明的结束;如果文档没有 DOCTYPE 声明,则不会调用此方法。
- 指定者:
endDTD
在接口LexicalHandler
中- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
startEntity
从接口LexicalHandler
复制的描述报告一些内部和外部 XML 实体的开始。参数实体(包括外部 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
- 应用程序可能会引发异常。- 参见:
-
endEntity
从接口LexicalHandler
复制的描述报告实体的结束。- 指定者:
endEntity
在接口LexicalHandler
中- 参数:
name
- 结束的实体名称。- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
comment
从接口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
从接口DeclHandler
复制的描述报告元素类型声明。内容模型将由字符串“EMPTY”、字符串“ANY”或带括号的组组成,后跟一个出现指示符(可选)。模型将被规范化,以便所有参数实体都被完全解析并删除所有空格,并将包括封闭的括号。其他规范化(例如删除多余的括号或简化出现指示符)由解析器自行决定。
- 指定者:
elementDecl
在接口DeclHandler
中- 参数:
name
- 元素类型名称。model
- 作为规范化字符串的内容模型。- 抛出:
SAXException
- 应用程序可能会引发异常。
-
externalEntityDecl
从接口DeclHandler
复制的描述报告已解析的外部实体声明。仅报告每个实体的有效(第一个)声明。
如果系统标识符是一个 URL,解析器必须在将它传递给应用程序之前完全解析它。
- 指定者:
externalEntityDecl
在接口DeclHandler
中- 参数:
name
- 实体的名称。如果它是参数实体,名称将以“%”开头。publicId
- 实体的公共标识符,如果没有给出则为 null。systemId
- 实体的系统标识符。- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
internalEntityDecl
从接口DeclHandler
复制的描述报告内部实体声明。仅报告每个实体的有效(第一个)声明。值中的所有参数实体都会展开,但一般实体不会。
- 指定者:
internalEntityDecl
在接口DeclHandler
中- 参数:
name
- 实体的名称。如果它是参数实体,名称将以“%”开头。value
- 实体的替换文本。- 抛出:
SAXException
- 应用程序可能会引发异常。- 参见:
-
getExternalSubset
告诉解析器如果文档文本中没有声明外部子集,则不应使用任何外部子集。- 指定者:
getExternalSubset
在接口EntityResolver2
中- 参数:
name
- 标识文档根元素。此名称来自 DOCTYPE 声明(如果可用)或实际的根元素。baseURI
- 文档的基本 URI,作为选择外部子集的附加提示。这始终是一个绝对 URI,除非它是空的,因为 XMLReader 被赋予了一个没有 InputSource 的 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 name 和 baseURI 以及已绝对化的 systemId 调用此方法。- 指定者:
resolveEntity
在接口EntityResolver2
中- 参数:
name
- 标识正在解析的外部实体。 “[dtd]”表示外部子集,或者以“%”开头的名称表示参数实体,或者是一般实体的名称。当由 SAX2 解析器调用时,这永远不会为 null。publicId
- 被引用的外部实体的公共标识符(根据 XML 规范的要求进行规范化),如果未提供则为 null。baseURI
- 解释相对 systemID 的 URI。这始终是一个绝对 URI,除非它为 null(可能是因为 XMLReader 被赋予了一个没有 InputSource 的 InputSource)。此 URI 由 XML 规范定义为与开始相关声明的“<”相关联的 URI。systemId
- 被引用的外部实体的系统标识符;相对或绝对 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 使用空实体名称和基本 URI 调用EntityResolver2.resolveEntity()
。您只需覆盖该方法即可使用此类。- 指定者:
resolveEntity
在接口EntityResolver
中- 重写:
resolveEntity
在类DefaultHandler
中- 参数:
publicId
- 公共标识符,如果没有可用标识符则为 null。systemId
- XML 文档中提供的系统标识符。- 返回:
- 新的输入源,或 null 以要求默认行为。
- 抛出:
SAXException
- 任何 SAX 异常,可能包装另一个异常。IOException
- 如果设置新输入源时出错。- 参见:
-