public interface XMLReader
org.xml.sax.XMLReader |
Known Indirect Subclasses |
使用回调来读取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接口(以及一些小的接口)更重要的增强功能:
有适配器可用于将SAX1解析器转换为SAX2 XMLReader,反之亦然。
Public methods |
|
---|---|
abstract ContentHandler |
getContentHandler() 返回当前的内容处理程序。 |
abstract DTDHandler |
getDTDHandler() 返回当前的DTD处理程序。 |
abstract EntityResolver |
getEntityResolver() 返回当前的实体解析器。 |
abstract ErrorHandler |
getErrorHandler() 返回当前的错误处理程序。 |
abstract boolean |
getFeature(String name) 查找功能标志的值。 |
abstract Object |
getProperty(String name) 查找一个属性的值。 |
abstract void |
parse(InputSource input) 解析一个XML文档。 |
abstract void |
parse(String systemId) 从系统标识符(URI)解析XML文档。 |
abstract void |
setContentHandler(ContentHandler handler) 允许应用程序注册内容事件处理程序。 |
abstract void |
setDTDHandler(DTDHandler handler) 允许应用程序注册DTD事件处理程序。 |
abstract void |
setEntityResolver(EntityResolver resolver) 允许应用程序注册实体解析器。 |
abstract void |
setErrorHandler(ErrorHandler handler) 允许应用程序注册错误事件处理程序。 |
abstract void |
setFeature(String name, boolean value) 设置功能标志的值。 |
abstract void |
setProperty(String name, Object value) 设置属性的值。 |
ContentHandler getContentHandler ()
返回当前的内容处理程序。
Returns | |
---|---|
ContentHandler |
The current content handler, or null if none has been registered. |
DTDHandler getDTDHandler ()
返回当前的DTD处理程序。
Returns | |
---|---|
DTDHandler |
The current DTD handler, or null if none has been registered. |
也可以看看:
EntityResolver getEntityResolver ()
返回当前的实体解析器。
Returns | |
---|---|
EntityResolver |
The current entity resolver, or null if none has been registered. |
ErrorHandler getErrorHandler ()
返回当前的错误处理程序。
Returns | |
---|---|
ErrorHandler |
The current error handler, or null if none has been registered. |
boolean getFeature (String name)
查找功能标志的值。
功能名称是任何完全限定的URI。 XMLReader可能会识别功能名称,但暂时无法返回其值。 某些功能值只能在特定的上下文中使用,例如在解析之前,之中或之后。 此外,某些功能值可能无法通过编程访问。 (对于SAX1 Parser
的适配器,没有独立于实现的方式来暴露底层解析器是否正在执行验证,扩展外部实体等等。)
所有XMLReader都需要识别http://xml.org/sax/features/namespaces和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上的名称来创建自己的特性。
Parameters | |
---|---|
name |
String : The feature name, which is a fully-qualified URI. |
Returns | |
---|---|
boolean |
The current value of the feature (true or false). |
Throws | |
---|---|
SAXNotRecognizedException |
If the feature value can't be assigned or retrieved. |
SAXNotSupportedException |
When the XMLReader recognizes the feature name but cannot determine its value at this time. |
也可以看看:
Object getProperty (String name)
查找一个属性的值。
属性名称是任何完全限定的URI。 XMLReader可能会识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如在解析之前,之中或之后。
XMLReaders不需要识别任何特定的属性名称,但是初始核心集合记录在SAX2中。
实现者可以免费(并鼓励)使用构建在他们自己的URI上的名称来创建他们自己的属性。
Parameters | |
---|---|
name |
String : The property name, which is a fully-qualified URI. |
Returns | |
---|---|
Object |
The current value of the property. |
Throws | |
---|---|
SAXNotRecognizedException |
If the property value can't be assigned or retrieved. |
SAXNotSupportedException |
When the XMLReader recognizes the property name but cannot determine its value at this time. |
也可以看看:
void parse (InputSource input)
解析一个XML文档。
应用程序可以使用此方法来指示XML阅读器开始从任何有效的输入源(字符流,字节流或URI)解析XML文档。
应用程序可能不会在解析过程中调用此方法(它们应该为每个嵌套的XML文档创建一个新的XMLReader)。 解析完成后,应用程序可能会重用相同的XMLReader对象,可能会使用不同的输入源。 除非配置的该方面的定义明确指定了其他行为,否则XMLReader对象的配置(例如为功能标志和属性建立的处理程序绑定和值)不会改变。 (例如,特征标志或属性暴露了正在分析的文档的特征。)
在解析过程中,XMLReader将通过注册的事件处理程序提供有关XML文档的信息。
这种方法是同步的:直到解析结束才会返回。 如果客户端应用程序想要尽早终止解析,它应该抛出异常。
Parameters | |
---|---|
input |
InputSource : The input source for the top-level of the XML document. |
Throws | |
---|---|
SAXException |
Any SAX exception, possibly wrapping another exception. |
IOException |
An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. |
void parse (String systemId)
从系统标识符(URI)解析XML文档。
此方法是从系统标识符中读取文档的常见情况的快捷方式。 这与以下内容完全相同:
parse(new InputSource(systemId));
如果系统标识符是一个URL,那么它在传递给解析器之前必须由应用程序完全解析。
Parameters | |
---|---|
systemId |
String : The system identifier (URI). |
Throws | |
---|---|
SAXException |
Any SAX exception, possibly wrapping another exception. |
IOException |
An IO exception from the parser, possibly from a byte stream or character stream supplied by the application. |
void setContentHandler (ContentHandler handler)
允许应用程序注册内容事件处理程序。
如果应用程序未注册内容处理程序,则SAX解析器报告的所有内容事件都将被忽略。
应用程序可以在解析中注册新的或不同的处理程序,并且SAX解析器必须立即开始使用新的处理程序。
Parameters | |
---|---|
handler |
ContentHandler : The content handler. |
也可以看看:
void setDTDHandler (DTDHandler handler)
允许应用程序注册DTD事件处理程序。
如果应用程序未注册DTD处理程序,则SAX解析器报告的所有DTD事件都将被忽略。
应用程序可以在解析中注册新的或不同的处理程序,并且SAX解析器必须立即开始使用新的处理程序。
Parameters | |
---|---|
handler |
DTDHandler : The DTD handler. |
也可以看看:
void setEntityResolver (EntityResolver resolver)
允许应用程序注册实体解析器。
如果应用程序未注册实体解析器,则XMLReader将执行其自己的默认解析。
应用程序可以在解析中注册一个新的或不同的解析器,并且SAX解析器必须立即开始使用新的解析器。
Parameters | |
---|---|
resolver |
EntityResolver : The entity resolver. |
也可以看看:
void setErrorHandler (ErrorHandler handler)
允许应用程序注册错误事件处理程序。
如果应用程序没有注册错误处理程序,则SAX解析器报告的所有错误事件将被忽略; 但是,正常的处理可能不会继续。 强烈建议所有SAX应用程序实施错误处理程序以避免意外的错误。
应用程序可以在解析中注册新的或不同的处理程序,并且SAX解析器必须立即开始使用新的处理程序。
Parameters | |
---|---|
handler |
ErrorHandler : The error handler. |
也可以看看:
void setFeature (String name, boolean value)
设置功能标志的值。
功能名称是任何完全限定的URI。 XMLReader可能公开一个特征值,但无法更改当前值。 某些特征值只能在特定上下文中不可变或可变,例如在解析之前,之中或之后。
所有XMLReaders都必须支持将http://xml.org/sax/features/namespaces设置为true,并将http://xml.org/sax/features/namespace-prefixes设置为false。
Parameters | |
---|---|
name |
String : The feature name, which is a fully-qualified URI. |
value |
boolean : The requested value of the feature (true or false). |
Throws | |
---|---|
SAXNotRecognizedException |
If the feature value can't be assigned or retrieved. |
SAXNotSupportedException |
When the XMLReader recognizes the feature name but cannot set the requested value. |
也可以看看:
void setProperty (String name, Object value)
设置属性的值。
属性名称是任何完全限定的URI。 XMLReader可能会识别属性名称,但无法更改当前值。 某些属性值只有在特定的上下文中才可以是不可变的或可变的,例如在解析之前,之中或之后。
XMLReaders不需要识别设置任何特定的属性名称,但核心集由SAX2定义。
该方法也是设置扩展处理程序的标准机制。
Parameters | |
---|---|
name |
String : The property name, which is a fully-qualified URI. |
value |
Object : The requested value for the property. |
Throws | |
---|---|
SAXNotRecognizedException |
If the property value can't be assigned or retrieved. |
SAXNotSupportedException |
When the XMLReader recognizes the property name but cannot set the requested value. |