org.xml.sax.ext

接口
所有已知子接口:
TransformerHandler
所有已知实现类:
DefaultHandler2

public interface LexicalHandler

用于词法事件的 SAX2 扩展处理程序。

此模块(包括源代码和文档)在公共域中,同时 没有担保有关更多信息,请参阅 http://www.saxproject.org

这是 SAX2 的可选扩展处理程序,以提供关于 XML 文档的词汇信息,例如,注释和 CDATA 节边界。不需要 XML 阅读器识别此处理程序,它不是仅核心 SAX2 分发的一部分。

词汇处理程序中的事件应用于整个文档,不是仅应用于文档元素,并且所有词汇处理程序事件必须在内容处理程序的 startDocument 和 endDocument 事件之间出现。

要为 XML 阅读器设置 LexicalHandler,使用带有属性名称 http://xml.org/sax/properties/lexical-handlersetProperty 方法以及将此接口(或 null)实现为该值的对象。如果阅读器不报告词汇事件,则尝试注册处理程序时,它将抛出 SAXNotRecognizedException

从以下版本开始:
SAX 2.0 (extensions 1.0)

方法摘要
 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 实体的开始。
 

方法详细信息

startDTD

void startDTD(String name,
              String publicId,
              String systemId)
              throws SAXException
报告 DTD 声明的开始(如果存在)。

此方法主要用于报告 DOCTYPE 声明的开始;如果文档没有任何 DOCTYPE 声明,则不调用此方法。

通过 DTDHandlerDeclHandler 事件报告的所有声明必须在 startDTD 和 endDTD 事件之间出现。可以假设声明属于内部 DTD 子集,除非它们在 startEntityendEntity 事件之间出现。也应该在 startDTD 和 endDTD 事件之间,以事件出现的原始顺序(逻辑)报告 DTD 的注释和处理指令;但是,它们不需要出现在相对于 DTDHandler 或 DeclHandler 事件的正确位置。

注意,start/endDTD 事件将出现在 ContentHandler 的 start/endDocument 事件中,并在第一个 startElement 事件之前。

参数:
name - 文档类型名称。
publicId - 用于外部 DTD 子集的已声明的公共标识符,如果没有声明,则为 null。
systemId - 用于外部 DTD 子集的已声明的系统公共标识符,如果没有声明,则为 null。(注意,这不能根据文档基 URI 解析)
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
endDTD(), startEntity(java.lang.String)

endDTD

void endDTD()
            throws SAXException
报告 DTD 声明的结束。

此方法主要用于报告 DOCTYPE 声明的结束;如果文档没有任何 DOCTYPE 声明,则不调用此方法。

抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
startDTD(java.lang.String, java.lang.String, java.lang.String)

startEntity

void startEntity(String name)
                 throws SAXException
报告一些内部和外部 XML 实体的开始。

参数实体(包括外部 DTD 子集)的报告是可选的,报告 LexicalHandler 事件的 SAX2 驱动程序不能实现它;可以使用 http://xml.org/sax/features/lexical-handler/parameter-entities 功能查询或控制参数实体的报告。

使用其正规名称报告常规实体,参数实体具有置于其名称前的 "%",并且外部 DTD 子集具有伪实体名 "[dtd]"。

在 SAX2 驱动程序提供这些事件时,所有其他事件必须在开始/结束实体事件中正确嵌套。不存在对来自 DeclHandlerDTDHandler 的事件进行正确排序的 附加要求。

注意,跳过的实体将通过 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)

endEntity

void endEntity(String name)
               throws SAXException
报告实体的结束。

参数:
name - 正在结束的实体名称。
抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
startEntity(java.lang.String)

startCDATA

void startCDATA()
                throws SAXException
报告 CDATA 节的开始。

通过常规 characters 事件报告 CDATA 节的内容;此事件仅用于报告边界。

抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
endCDATA()

endCDATA

void endCDATA()
              throws SAXException
报告 CDATA 节的结束。

抛出:
SAXException - 应用程序可能引发一个异常。
另请参见:
startCDATA()

comment

void comment(char[] ch,
             int start,
             int length)
             throws SAXException
报告文档的任何位置的 XML 注释。

此回调将用于文档元素内外的注释,包括外部 DTD 子集中的注释(如果读取)。必须在 start/endDTD 和 start/endEntity 事件内部正确嵌套 DTD 中的注释(如果已使用)。

参数:
ch - 保存注释中的字符的数组。
start - 数组中的开始位置。
length - 使用的数组中的字符数。
抛出:
SAXException - 应用程序可能引发一个异常。