Module java.xml
Package org.xml.sax.ext

Interface LexicalHandler

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

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

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

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

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

自从:
1.4, SAX 2.0 (扩展 1.0)
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    comment(char[] ch, int start, int length)
    报告文档中的XML注释。
    void
    报告CDATA部分的结束。
    void
    endDTD()
    报告DTD声明的结束。
    void
    endEntity(String name)
    报告实体的结束。
    void
    报告CDATA部分的开始。
    void
    startDTD(String name, String publicId, String systemId)
    报告DTD声明的开始(如果有)。
    void
    报告一些内部和外部XML实体的开始。
  • Method Details

    • startDTD

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

      此方法旨在报告DOCTYPE声明的开始;如果文档没有DOCTYPE声明,则不会调用此方法。

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

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

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

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

      此方法旨在报告DOCTYPE声明的结束;如果文档没有DOCTYPE声明,则不会调用此方法。

      抛出:
      SAXException - 应用程序可能引发异常。
      参见:
    • startEntity

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

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

      一般实体使用其常规名称报告,参数实体的名称前面有'%',外部DTD子集的伪实体名称为"[dtd]"。

      当SAX2驱动程序提供这些事件时,所有其他事件必须正确嵌套在start/end实体事件内。没有额外要求要求DeclHandlerDTDHandler事件正确排序。

      请注意,跳过的实体将通过skippedEntity事件报告,这是ContentHandler接口的一部分。

      由于SAX使用的流式事件模型,某些实体边界无论如何都无法报告:

    • 属性值中的一般实体
    • 声明中的参数实体
    • 这些将被静默扩展,不会指示原始实体边界在哪里。

      还请注意,字符引用的边界(实际上并不是实体)不会报告。

      所有start/endEntity事件必须正确嵌套。

      参数:
      name - 实体的名称。如果是参数实体,则名称将以'%'开头,如果是外部DTD子集,则为"[dtd]"。
      抛出:
      SAXException - 应用程序可能引发异常。
      参见:
    • endEntity

      void endEntity(String name) throws SAXException
      报告实体的结束。
      参数:
      name - 正在结束的实体的名称。
      抛出:
      SAXException - 应用程序可能引发异常。
      参见:
    • startCDATA

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

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

      抛出:
      SAXException - 应用程序可能引发异常。
      参见:
    • endCDATA

      void endCDATA() throws SAXException
      报告CDATA部分的结束。
      抛出:
      SAXException - 应用程序可能引发异常。
      参见:
    • comment

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

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

      参数:
      ch - 包含注释中字符的数组。
      start - 数组中的起始位置。
      length - 从数组中使用的字符数。
      抛出:
      SAXException - 应用程序可能引发异常。