public interface LexicalHandler
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY. See http://www.saxproject.org for further information.
这是一个可选的扩展处理程序,用于SAX2提供有关XML文档的词法信息,如注释和CDATA段边界。 XML读取器不需要识别此处理程序,它不是仅核心的SAX2发行版的一部分。
词法处理程序中的事件适用于整个文档,而不仅仅是文档元素,并且所有词法处理程序事件必须出现在内容处理程序的startDocument和endDocument事件之间。
要为XML读取器设置LexicalHandler,请使用属性名称为http://xml.org/sax/properties/lexical-handler
的setProperty
方法和实现此接口(或null)的对象作为值。 如果读者没有报告词汇事件,那么当您尝试注册处理程序时,它会抛出一个SAXNotRecognizedException
。
Modifier and Type | Method and Description |
---|---|
void |
comment(char[] ch, int start, int length)
在文档的任何位置报告XML注释。
|
void |
endCDATA()
报告CDATA部分的结尾。
|
void |
endDTD()
报告DTD声明的结尾。
|
void |
endEntity(String name)
报告实体的结束。
|
void |
startCDATA()
报告CDATA部分的开始。
|
void |
startDTD(String name, String publicId, String systemId)
报告DTD声明的开始,如果有的话。
|
void |
startEntity(String name)
报告一些内部和外部XML实体的开始。
|
void startDTD(String name, String publicId, String systemId) throws SAXException
此方法用于报告DOCTYPE声明的开始; 如果文档没有DOCTYPE声明,则不会调用此方法。
通过DTDHandler
或DeclHandler
事件报告的所有声明必须出现在startDTD和endDTD
事件之间。 假设声明属于内部DTD子集,除非它们出现在startEntity
和endEntity
事件之间。 来自DTD的注释和处理指令也应在startDTD和endDTD事件之间以其原始的(逻辑)发生顺序报告; 但是,它们不需要出现在相对于DTDHandler或DeclHandler事件的正确位置。
请注意,start / endDTD事件将显示在ContentHandler的start / endDocument事件之前和第一个startElement
事件之前。
name
- 文档类型名称。
publicId
- 外部DTD子集的已声明的公共标识符,如果未声明,则为null。
systemId
- 外部DTD子集的已声明的系统标识符,如果未声明,则为null。
(请注意,这不是针对文档基础URI解决的。)
SAXException
- 应用程序可能会引发异常。
endDTD()
,
startEntity(java.lang.String)
void endDTD() throws SAXException
此方法用于报告DOCTYPE声明的结尾; 如果文档没有DOCTYPE声明,则不会调用此方法。
SAXException
- 应用程序可能会引发异常。
startDTD(java.lang.String, java.lang.String, java.lang.String)
void startEntity(String name) throws SAXException
参数实体(包括外部DTD子集)的报告是可选的,报告LexicalHandler事件的SAX2驱动程序可能无法实现; 您可以使用http://xml.org/sax/features/lexical-handler/parameter-entities
功能来查询或控制参数实体的报告。
一般实体以其常规名称报告,参数实体的名称前面有'%',外部DTD子集具有伪实体名称“[dtd]”。
当SAX2驱动程序提供这些事件时,所有其他事件必须正确嵌套在开始/结束实体事件中。 不需要额外要求DeclHandler
或DTDHandler
的事件正确订购。
请注意,跳过的实体将通过skippedEntity
事件进行报告,这是ContentHandler界面的一部分。
由于SAX使用的流媒体事件模型,在任何情况下都不能报告某些实体边界:
这些将被默默地扩大,没有指示原始实体边界在哪里。
还要注意,不会报告字符引用的边界(这不是真正的实体)。
所有的start / endEntity事件必须正确嵌套。
name
- 实体的名称。
如果它是参数实体,则名称将以'%'开头,如果是外部DTD子集,它将为“[dtd]”。
SAXException
- 应用程序可能引发异常。
endEntity(java.lang.String)
,
DeclHandler.internalEntityDecl(java.lang.String, java.lang.String)
,
DeclHandler.externalEntityDecl(java.lang.String, java.lang.String, java.lang.String)
void endEntity(String name) throws SAXException
name
- 正在结束的实体的名称。
SAXException
- 应用程序可能会引发异常。
startEntity(java.lang.String)
void startCDATA() throws SAXException
CDATA部分的内容将通过常规characters
事件报告; 此事件仅用于报告边界。
SAXException
- 应用程序可能会引发异常。
endCDATA()
void endCDATA() throws SAXException
SAXException
- 应用程序可能引发异常。
startCDATA()
void comment(char[] ch, int start, int length) throws SAXException
此回调将用于文档元素内部或外部的注释,包括外部DTD子集中的注释(如果已读)。 DTD中的注释必须正确嵌套在start / endDTD和start / endEntity事件(如果使用)中。
ch
- 在注释中保存
ch
的数组。
start
- 数组中的起始位置。
length
- 要从数组使用的字符数。
SAXException
- 应用程序可能会引发异常。