- 已知的所有子接口:
-
XMLFilter
- 已知的所有实现类:
-
ParserAdapter,XMLFilterImpl
XMLReader是XML解析器的SAX2驱动程序必须实现的接口。该接口允许应用程序在解析器中设置和查询特性和属性,为文档处理注册事件处理程序,并启动文档解析。
所有SAX接口都被假定为同步的:在解析完成之前,parse方法不能返回,读取器必须等待事件处理程序回调返回后才能报告下一个事件。
该接口取代了(现已弃用的)SAX 1.0 Parser接口。XMLReader接口相对于旧的Parser接口增加了两个重要的增强功能(以及一些次要的增强功能):
- 它添加了一种标准的查询和设置特性和属性的方式;以及
- 它添加了命名空间支持,这对许多更高级别的XML标准是必需的。
有适配器可用于将SAX1解析器转换为SAX2 XMLReader,反之亦然。
- API注释:
-
尽管它的名称是这样,但该接口并未扩展标准Java
Reader接口,因为读取XML是一种与读取字符数据根本不同的活动。 - 自从:
- 1.4, SAX 2.0
- 另请参阅:
-
Method Summary
Modifier and TypeMethodDescription返回当前内容处理程序。返回当前DTD处理程序。返回当前实体解析器。返回当前错误处理程序。booleangetFeature(String name) 查找特性标志的值。getProperty(String name) 查找属性的值。void从系统标识符(URI)解析XML文档。voidparse(InputSource input) 解析XML文档。voidsetContentHandler(ContentHandler handler) 允许应用程序注册内容事件处理程序。voidsetDTDHandler(DTDHandler handler) 允许应用程序注册DTD事件处理程序。voidsetEntityResolver(EntityResolver resolver) 允许应用程序注册实体解析器。voidsetErrorHandler(ErrorHandler handler) 允许应用程序注册错误事件处理程序。voidsetFeature(String name, boolean value) 设置特性标志的值。voidsetProperty(String name, Object value) 设置属性的值。
-
Method Details
-
getFeature
查找特性标志的值。特性名称是任何完全限定的URI。XMLReader可能会识别特性名称,但暂时无法返回其值。某些特性值可能仅在特定上下文中可用,例如在解析之前、期间或之后。此外,某些特性值可能无法通过编程方式访问。(对于SAX1
Parser的适配器,没有一种独立于实现的方法来公开底层解析器是否执行验证、扩展外部实体等。)所有XMLReader都必须识别http://xml.org/sax/features/namespaces和http://xml.org/sax/features/namespace-prefixes特性名称。
典型用法如下:
XMLReader r = new MySAXDriver(); // 尝试激活验证 try { r.setFeature("http://xml.org/sax/features/validation", true); } catch (SAXException e) { System.err.println("无法激活验证。"); } // 注册事件处理程序 r.setContentHandler(new MyContentHandler()); r.setErrorHandler(new MyErrorHandler()); // 解析第一个文档 try { r.parse("http://www.foo.com/mydoc.xml"); } catch (IOException e) { System.err.println("读取XML文档时发生I/O异常"); } catch (SAXException e) { System.err.println("读取文档时发生XML异常。"); }实现者可以自由(并且鼓励)发明自己的特性,使用基于其自己URI的名称。
- 参数:
-
name- 特性名称,即完全限定的URI。 - 返回:
- 特性的当前值(true或false)。
- 抛出:
-
SAXNotRecognizedException- 如果无法分配或检索特性值。 -
SAXNotSupportedException- 当XMLReader识别特性名称但目前无法确定其值时。 - 另请参阅:
-
setFeature
void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException 设置特性标志的值。特性名称是任何完全限定的URI。XMLReader可能会公开特性值,但无法更改当前值。某些特性值可能在特定上下文中是不可变的或仅在解析之前、期间或之后可变。
所有XMLReader都必须支持将http://xml.org/sax/features/namespaces设置为true和http://xml.org/sax/features/namespace-prefixes设置为false。
- 参数:
-
name- 特性名称,即完全限定的URI。 -
value- 特性的请求值(true或false)。 - 抛出:
-
SAXNotRecognizedException- 如果无法分配或检索特性值。 -
SAXNotSupportedException- 当XMLReader识别特性名称但无法设置请求的值时。 - 另请参阅:
-
getProperty
查找属性的值。属性名称是任何完全限定的URI。XMLReader可能会识别属性名称,但暂时无法返回其值。某些属性值可能仅在特定上下文中可用,例如在解析之前、期间或之后。
XMLReader不需要识别任何特定的属性名称,尽管SAX2为其定义了一个初始核心集。
实现者可以自由(并且鼓励)发明自己的属性,使用基于其自己URI的名称。
- 参数:
-
name- 属性名称,即完全限定的URI。 - 返回:
- 属性的当前值。
- 抛出:
-
SAXNotRecognizedException- 如果无法分配或检索属性值。 -
SAXNotSupportedException- 当XMLReader识别属性名称但目前无法确定其值时。 - 另请参阅:
-
setProperty
void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException 设置属性的值。属性名称是任何完全限定的URI。XMLReader可能会识别属性名称,但无法更改当前值。某些属性值可能在特定上下文中是不可变的或仅在解析之前、期间或之后可变。
XMLReader不需要识别设置任何特定属性名称,尽管SAX2定义了一个核心集。
该方法也是设置扩展处理程序的标准机制。
- 参数:
-
name- 属性名称,即完全限定的URI。 -
value- 属性的请求值。 - 抛出:
-
SAXNotRecognizedException- 如果无法分配或检索属性值。 -
SAXNotSupportedException- 当XMLReader识别属性名称但无法设置请求的值时。
-
setEntityResolver
允许应用程序注册实体解析器。如果应用程序未注册实体解析器,XMLReader将执行自己的默认解析。
应用程序可以在解析过程中注册新的或不同的解析器,SAX解析器必须立即开始使用新的解析器。
- 参数:
-
resolver- 实体解析器。 - 另请参阅:
-
getEntityResolver
EntityResolver getEntityResolver()返回当前实体解析器。- 返回:
- 当前实体解析器,如果未注册则为null。
- 另请参阅:
-
setDTDHandler
允许应用程序注册DTD事件处理程序。如果应用程序未注册DTD处理程序,SAX解析器报告的所有DTD事件将被静默忽略。
应用程序可以在解析过程中注册新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数:
-
handler- DTD处理程序。 - 另请参阅:
-
getDTDHandler
DTDHandler getDTDHandler()返回当前DTD处理程序。- 返回:
- 当前DTD处理程序,如果未注册则为null。
- 另请参阅:
-
setContentHandler
允许应用程序注册内容事件处理程序。如果应用程序未注册内容处理程序,则SAX解析器报告的所有内容事件将被静默忽略。
应用程序可以在解析过程中注册新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数:
-
handler- 内容处理程序。 - 参见:
-
getContentHandler
ContentHandler getContentHandler()返回当前的内容处理程序。- 返回:
- 当前的内容处理程序,如果没有注册则返回null。
- 参见:
-
setErrorHandler
允许应用程序注册错误事件处理程序。如果应用程序未注册错误处理程序,则SAX解析器报告的所有错误事件将被静默忽略;但是,正常处理可能无法继续。强烈建议所有SAX应用程序实现错误处理程序,以避免意外错误。
应用程序可以在解析过程中注册新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数:
-
handler- 错误处理程序。 - 参见:
-
getErrorHandler
ErrorHandler getErrorHandler()返回当前的错误处理程序。- 返回:
- 当前的错误处理程序,如果没有注册则返回null。
- 参见:
-
parse
解析XML文档。应用程序可以使用此方法指示XML阅读器从任何有效输入源(字符流、字节流或URI)开始解析XML文档。
应用程序在解析过程中不得调用此方法(它们应为每个嵌套的XML文档创建一个新的XMLReader)。一旦解析完成,应用程序可以重用相同的XMLReader对象,可能使用不同的输入源。XMLReader对象的配置(例如为特性标志和属性建立的处理程序绑定和值)在解析完成后不会更改,除非该配置的定义明确指定其他行为。(例如,暴露被解析文档特性的特性标志或属性。)
在解析过程中,XMLReader将通过注册的事件处理程序提供有关XML文档的信息。
此方法是同步的:直到解析结束才会返回。如果客户端应用程序希望提前终止解析,应该抛出异常。
- 参数:
-
input- XML文档顶层的输入源。 - 抛出:
-
SAXException- 任何SAX异常,可能包装另一个异常。 -
IOException- 来自解析器的IO异常,可能来自应用程序提供的字节流或字符流。 - 参见:
-
parse
从系统标识符(URI)解析XML文档。此方法是从系统标识符读取文档的常见情况的快捷方式。它与以下内容完全相同:
parse(new InputSource(systemId));
如果系统标识符是URL,则必须由应用程序在传递给解析器之前完全解析。
- 参数:
-
systemId- 系统标识符(URI)。 - 抛出:
-
SAXException- 任何SAX异常,可能包装另一个异常。 -
IOException- 来自解析器的IO异常,可能来自应用程序提供的字节流或字符流。 - 参见:
-