-
- All Known Subinterfaces:
-
XMLFilter
- 所有已知实现类:
-
ParserAdapter,XMLFilterImpl
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界面(以及一些较小的)的两个重要增强功能:- 它增加了查询和设置特征和属性的标准方法; 和
- 它增加了命名空间支持,这是许多更高级别的XML标准所必需的。
有可用于将SAX1解析器转换为SAX2 XMLReader的适配器,反之亦然。
- 从以下版本开始:
- 1.4,SAX 2.0
- 另请参见:
-
XMLFilter,ParserAdapter,XMLReaderAdapter
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 ContentHandlergetContentHandler()返回当前内容处理程序。DTDHandlergetDTDHandler()返回当前的DTD处理程序。EntityResolvergetEntityResolver()返回当前的实体解析器。ErrorHandlergetErrorHandler()返回当前的错误处理程序。booleangetFeature(String name)查找特征标记的值。ObjectgetProperty(String name)查找属性的值。voidparse(String systemId)从系统标识符(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)设置属性的值。
-
-
-
方法详细信息
-
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()
-
getEntityResolver
EntityResolver getEntityResolver()
返回当前的实体解析器。- 结果
- 当前实体解析器,如果没有注册,则为null。
- 另请参见:
-
setEntityResolver(org.xml.sax.EntityResolver)
-
setDTDHandler
void setDTDHandler(DTDHandler handler)
允许应用程序注册DTD事件处理程序。如果应用程序未注册DTD处理程序,则SAX解析器报告的所有DTD事件将被默认忽略。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数
-
handler- DTD处理程序。 - 另请参见:
-
getDTDHandler()
-
getDTDHandler
DTDHandler getDTDHandler()
返回当前的DTD处理程序。- 结果
- 当前的DTD处理程序,如果没有注册,则为null。
- 另请参见:
-
setDTDHandler(org.xml.sax.DTDHandler)
-
setContentHandler
void setContentHandler(ContentHandler handler)
允许应用程序注册内容事件处理程序。如果应用程序没有注册内容处理程序,SAX解析器报告的所有内容事件将被默认忽略。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数
-
handler- 内容处理程序。 - 另请参见:
-
getContentHandler()
-
getContentHandler
ContentHandler getContentHandler()
返回当前内容处理程序。- 结果
- 当前内容处理程序,如果没有注册,则为null。
- 另请参见:
-
setContentHandler(org.xml.sax.ContentHandler)
-
setErrorHandler
void setErrorHandler(ErrorHandler handler)
允许应用程序注册错误事件处理程序。如果应用程序没有注册错误处理程序,SAX解析器报告的所有错误事件将被默认忽略; 然而,正常处理可能不会继续。 强烈建议所有SAX应用程序实施一个错误处理程序,以避免意外的错误。
应用程序可以在解析过程中注册一个新的或不同的处理程序,SAX解析器必须立即开始使用新的处理程序。
- 参数
-
handler- 错误处理程序。 - 另请参见:
-
getErrorHandler()
-
getErrorHandler
ErrorHandler getErrorHandler()
返回当前的错误处理程序。- 结果
- 当前错误处理程序,如果没有注册,则为null。
- 另请参见:
-
setErrorHandler(org.xml.sax.ErrorHandler)
-
parse
void parse(InputSource input) throws IOException, SAXException
解析一个XML文档。应用程序可以使用此方法指示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)
-
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)
-
-