public interface XMLReader
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的适配器,反之亦然。
XMLFilter
, ParserAdapter
, XMLReaderAdapter
Modifier and Type | Method and Description |
---|---|
ContentHandler |
getContentHandler()
返回当前内容处理程序。
|
DTDHandler |
getDTDHandler()
返回当前的DTD处理程序。
|
EntityResolver |
getEntityResolver()
返回当前的实体解析器。
|
ErrorHandler |
getErrorHandler()
返回当前的错误处理程序。
|
boolean |
getFeature(String name)
查找特征标记的值。
|
Object |
getProperty(String name)
查找属性的值。
|
void |
parse(InputSource input)
解析一个XML文档。
|
void |
parse(String systemId)
从系统标识符(URI)解析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)
设置属性的值。
|
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。
SAXNotRecognizedException
- 如果功能值无法分配或检索。
SAXNotSupportedException
- 当XMLReader识别功能名称,但此时无法确定其值。
setFeature(java.lang.String, boolean)
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)
Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是任何完全限定的URI。 XMLReader可以识别属性名称,但暂时无法返回其值。 某些属性值可能仅在特定上下文中可用,例如解析之前,之中或之后。
不需要XMLReaders来识别任何特定的属性名称,尽管SAX2记录了一个初始的核心集。
实施者是免费的(并被鼓励)发明自己的属性,使用自己的URI建立的名称。
name
- 属性名称,它是一个完全限定的URI。
SAXNotRecognizedException
- 如果属性值无法分配或检索。
SAXNotSupportedException
- 当XMLReader识别属性名称,但此时不能确定其值。
setProperty(java.lang.String, java.lang.Object)
void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException
属性名称是任何完全限定的URI。 XMLReader可以识别属性名称,但无法更改当前值。 一些属性值可能只在特定的上下文中是不可变的或可变的,例如在解析之前,期间或之后。
不需要XMLReaders来识别设置任何特定的属性名称,尽管核心集由SAX2定义。
此方法也是设置扩展处理程序的标准机制。
name
- 属性名称,它是一个完全限定的URI。
value
- 该属性的请求值。
SAXNotRecognizedException
- 如果不能分配或检索属性值。
SAXNotSupportedException
- 当XMLReader识别属性名称但无法设置请求的值时。
void setEntityResolver(EntityResolver resolver)
如果应用程序没有注册实体解析器,则XMLReader将执行自己的默认分辨率。
应用程序可以在解析过程中注册一个新的或不同的解析器,SAX解析器必须立即开始使用新的解析器。
resolver
- 实体解析器。
getEntityResolver()
EntityResolver getEntityResolver()
setEntityResolver(org.xml.sax.EntityResolver)
void setDTDHandler(DTDHandler handler)
如果应用程序没有注册DTD处理程序,则SAX解析器报告的所有DTD事件将被默认忽略。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
handler
- DTD处理程序。
getDTDHandler()
DTDHandler getDTDHandler()
setDTDHandler(org.xml.sax.DTDHandler)
void setContentHandler(ContentHandler handler)
如果应用程序没有注册内容处理程序,SAX解析器报告的所有内容事件将被默认忽略。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
handler
- 内容处理程序。
getContentHandler()
ContentHandler getContentHandler()
setContentHandler(org.xml.sax.ContentHandler)
void setErrorHandler(ErrorHandler handler)
如果应用程序没有注册错误处理程序,SAX解析器报告的所有错误事件将被默认忽略; 然而,正常处理可能不会继续。 强烈建议所有SAX应用程序实施一个错误处理程序,以避免意外的错误。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
handler
- 错误处理程序。
getErrorHandler()
ErrorHandler getErrorHandler()
setErrorHandler(org.xml.sax.ErrorHandler)
void parse(InputSource input) throws IOException, SAXException
应用程序可以使用此方法指示XML阅读器从任何有效的输入源(字符流,字节流或URI)开始解析XML文档。
解析过程中应用程序可能无法调用此方法(应为每个嵌套XML文档创建新的XMLReader)。 一旦解析完成,应用程序可以重用相同的XMLReader对象,可能使用不同的输入源。 完成解析后,XMLReader对象(例如为特征标志和属性建立的处理程序绑定和值)的配置不会改变,除非该配置的该方面的定义明确指定其他行为。 (例如,显示要解析的文档的特征的要素标志或属性。)
在解析过程中,XMLReader将通过注册的事件处理程序提供有关XML文档的信息。
此方法是同步的:它将不会返回,直到解析结束。 如果客户端应用程序想要尽早终止解析,则应该抛出异常。
input
- XML文档顶层的输入源。
SAXException
- 任何SAX异常,可能包装另一个异常。
IOException
- 解析器的IO异常,可能来自应用程序提供的字节流或字符流。
InputSource
, parse(java.lang.String)
, setEntityResolver(org.xml.sax.EntityResolver)
, setDTDHandler(org.xml.sax.DTDHandler)
, setContentHandler(org.xml.sax.ContentHandler)
, setErrorHandler(org.xml.sax.ErrorHandler)
void parse(String systemId) throws IOException, SAXException
此方法是从系统标识符读取文档的常见情况的快捷方式。 它完全相当于以下内容:
parse(new InputSource(systemId));
如果系统标识符是URL,则应用程序在将其传递给解析器之前必须完全解析。
systemId
- 系统标识符(URI)。
SAXException
- 任何SAX异常,可能包含另一个异常。
IOException
- 解析器的IO异常,可能来自应用程序提供的字节流或字符流。
parse(org.xml.sax.InputSource)