Module  java.xml
软件包  org.xml.sax

Interface XMLReader

  • All Known Subinterfaces:
    XMLFilter
    所有已知实现类:
    ParserAdapterXMLFilterImpl


    public interface XMLReader
    使用回调读取XML文档的界面。
    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.

    注意:尽管它的名字,此接口扩展标准的Java Reader接口,因为读取XML是一个完全不同的活动与读取字符数据。

    XMLReader是XML解析器的SAX2驱动程序必须实现的接口。 该接口允许应用程序在解析器中设置和查询特征和属性,注册用于文档处理的事件处理程序,并启动文档解析。

    假设所有SAX接口都是同步的: parse方法不能返回,直到解析完成,读者必须等待事件处理程序回调才能返回,然后再报告下一个事件。

    此接口替换(现已弃用)SAX 1.0 Parser接口。 XMLReader界面包含了旧的Parser界面(以及一些较小的)的两个重要增强功能:

    1. 它增加了查询和设置特征和属性的标准方法;
    2. 它增加了命名空间支持,这是许多更高级别的XML标准所必需的。

    有可用于将SAX1解析器转换为SAX2 XMLReader的适配器,反之亦然。

    从以下版本开始:
    1.4,SAX 2.0
    另请参见:
    XMLFilterParserAdapterXMLReaderAdapter
    • 方法详细信息

      • getFeature

        boolean getFeature​(String name)
                    throws SAXNotRecognizedException,
                           SAXNotSupportedException
        查找特征标记的值。

        功能名称是任何完全限定的URI。 XMLReader可以识别一个功能名称,但暂时无法返回其值。 一些特征值可能仅在特定上下文中可用,例如解析之前,期间或之后。 此外,某些功能值可能无法以编程方式访问。 (在适用于SAX1 Parser的适配器的情况下,没有实现独立的方式来公开底层解析器是否正在执行验证,扩展外部实体等)。

        所有XMLReaders都需要识别http://xml.org/sax/features/names空间和http://xml.org/sax/features/namespace-prefixes功能名称。

        典型用法是这样的:

          XMLReader r = new MySAXDriver();
        
                                 // try to activate validation
         try {
           r.setFeature("http://xml.org/sax/features/validation", true);
         } catch (SAXException e) {
           System.err.println("Cannot activate validation.");
         }
        
                                 // register event handlers
         r.setContentHandler(new MyContentHandler());
         r.setErrorHandler(new MyErrorHandler());
        
                                 // parse the first document
         try {
           r.parse("http://www.foo.com/mydoc.xml");
         } catch (IOException e) {
           System.err.println("I/O exception reading XML document");
         } catch (SAXException e) {
           System.err.println("XML exception reading document.");
         } 

        实施者是免费(并被鼓励)发明自己的功能,使用自己的URI建立的名称。

        参数
        name - 功能名称,它是一个完全限定的URI。
        结果
        特征的当前值(true或false)。
        异常
        SAXNotRecognizedException - 如果无法分配或检索到特征值。
        SAXNotSupportedException - 当XMLReader识别功能名称,但无法确定其在此时的值。
        另请参见:
        setFeature(java.lang.String, boolean)
      • setFeature

        void setFeature​(String name,
                        boolean value)
                 throws SAXNotRecognizedException,
                        SAXNotSupportedException
        设置特征标志的值。

        功能名称是任何完全限定的URI。 XMLReader可能会显示一个特征值,但是无法更改当前值。 一些特征值可能只在特定的上下文中是不可变的或可变的,例如解析之前,期间或之后。

        所有XMLReaders都需要支持将http://xml.org/sax/features/namespaces设置为true,将http://xml.org/sax/features/namespace-prefixes设置为false。

        参数
        name - 功能名称,它是一个完全限定的URI。
        value - 要素的值(true或false)。
        异常
        SAXNotRecognizedException - 如果不能分配或检索到特征值。
        SAXNotSupportedException - 当XMLReader识别功能名称但无法设置请求的值时。
        另请参见:
        getFeature(java.lang.String)
      • getProperty

        Object getProperty​(String name)
                    throws SAXNotRecognizedException,
                           SAXNotSupportedException
        查找属性的值。

        属性名称是任何完全限定的URI。 XMLReader可以识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如解析之前,之中或之后。

        不需要XMLReaders来识别任何特定的属性名称,尽管SAX2记录了一个初始的核心集。

        实施者是免费的(并被鼓励)发明自己的属性,使用自己的URI建立的名称。

        参数
        name - 属性名称,它是一个完全限定的URI。
        结果
        当前的属性值。
        异常
        SAXNotRecognizedException - 如果不能分配或检索属性值。
        SAXNotSupportedException - 当XMLReader识别属性名称,但此时无法确定其值。
        另请参见:
        setProperty(java.lang.String, java.lang.Object)
      • setProperty

        void setProperty​(String name,
                         Object value)
                  throws SAXNotRecognizedException,
                         SAXNotSupportedException
        设置属性的值。

        属性名称是任何完全限定的URI。 XMLReader可以识别属性名称,但无法更改当前值。 一些属性值可能只在特定的上下文中是不可变的或可变的,例如在解析之前,期间或之后。

        不需要XMLReaders来识别设置任何特定的属性名称,尽管核心集由SAX2定义。

        此方法也是设置扩展处理程序的标准机制。

        参数
        name - 属性名称,它是一个完全限定的URI。
        value - 该属性的请求值。
        异常
        SAXNotRecognizedException - 如果不能分配或检索属性值。
        SAXNotSupportedException - 当XMLReader识别属性名称但无法设置请求的值时。
      • setEntityResolver

        void setEntityResolver​(EntityResolver resolver)
        允许应用程序注册一个实体解析器。

        如果应用程序没有注册实体解析器,则XMLReader将执行自己的默认分辨率。

        应用程序可以在解析过程中注册一个新的或不同的解析器,SAX解析器必须立即开始使用新的解析器。

        参数
        resolver - 实体解析器。
        另请参见:
        getEntityResolver()
      • setDTDHandler

        void setDTDHandler​(DTDHandler handler)
        允许应用程序注册DTD事件处理程序。

        如果应用程序未注册DTD处理程序,则SAX解析器报告的所有DTD事件将被默认忽略。

        应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。

        参数
        handler - DTD处理程序。
        另请参见:
        getDTDHandler()
      • setContentHandler

        void setContentHandler​(ContentHandler handler)
        允许应用程序注册内容事件处理程序。

        如果应用程序没有注册内容处理程序,SAX解析器报告的所有内容事件将被默认忽略。

        应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。

        参数
        handler - 内容处理程序。
        另请参见:
        getContentHandler()
      • setErrorHandler

        void setErrorHandler​(ErrorHandler handler)
        允许应用程序注册错误事件处理程序。

        如果应用程序没有注册错误处理程序,SAX解析器报告的所有错误事件将被默认忽略; 然而,正常处理可能不会继续。 强烈建议所有SAX应用程序实施一个错误处理程序,以避免意外的错误。

        应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。

        参数
        handler - 错误处理程序。
        另请参见:
        getErrorHandler()
      • parse

        void parse​(InputSource input)
            throws IOException,
                   SAXException
        解析一个XML文档。

        应用程序可以使用此方法指示XML阅读器从任何有效的输入源(字符流,字节流或URI)开始解析XML文档。

        解析过程中应用程序可能无法调用此方法(应为每个嵌套XML文档创建新的XMLReader)。 一旦解析完成,应用程序可以重用相同的XMLReader对象,可能使用不同的输入源。 完成解析后,XMLReader对象(例如为特征标志和属性建立的处理程序绑定和值)的配置不会改变,除非该配置的该方面的定义明确指定其他行为。 (例如,显示要解析的文档的特征的要素标志或属性。)

        在解析过程中,XMLReader将通过注册的事件处理程序提供有关XML文档的信息。

        此方法是同步的:它将不会返回,直到解析结束。 如果客户端应用程序想要尽早终止解析,则应该抛出异常。

        参数
        input - XML文档顶级的输入源。
        异常
        SAXException - 任何SAX异常,可能包含另一个异常。
        IOException - 解析器的IO异常,可能来自应用程序提供的字节流或字符流。
        另请参见:
        InputSourceparse(java.lang.String)setEntityResolver(org.xml.sax.EntityResolver)setDTDHandler(org.xml.sax.DTDHandler)setContentHandler(org.xml.sax.ContentHandler)setErrorHandler(org.xml.sax.ErrorHandler)
      • parse

        void parse​(String systemId)
            throws IOException,
                   SAXException
        从系统标识符(URI)解析XML文档。

        该方法是从系统标识符读取文档的常见情况的快捷方式。 它完全相当于以下内容:

          parse(new InputSource(systemId)); 

        如果系统标识符是URL,则应用程序在将其传递给解析器之前必须完全解析。

        参数
        systemId - 系统标识符(URI)。
        异常
        SAXException - 任何SAX异常,可能包装另一个异常。
        IOException - 解析器的IO异常,可能来自应用程序提供的字节流或字符流。
        另请参见:
        parse(org.xml.sax.InputSource)