- 已知的所有子接口:
-
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处理程序。返回当前实体解析器。返回当前错误处理程序。boolean
getFeature
(String name) 查找特性标志的值。getProperty
(String name) 查找属性的值。void
从系统标识符(URI)解析XML文档。void
parse
(InputSource input) 解析XML文档。void
setContentHandler
(ContentHandler handler) 允许应用程序注册内容事件处理程序。void
setDTDHandler
(DTDHandler handler) 允许应用程序注册DTD事件处理程序。void
setEntityResolver
(EntityResolver resolver) 允许应用程序注册实体解析器。void
setErrorHandler
(ErrorHandler handler) 允许应用程序注册错误事件处理程序。void
setFeature
(String name, boolean value) 设置特性标志的值。void
setProperty
(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异常,可能来自应用程序提供的字节流或字符流。 - 参见:
-