-
- 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 方法 描述 ContentHandler
getContentHandler()
返回当前内容处理程序。DTDHandler
getDTDHandler()
返回当前的DTD处理程序。EntityResolver
getEntityResolver()
返回当前的实体解析器。ErrorHandler
getErrorHandler()
返回当前的错误处理程序。boolean
getFeature(String name)
查找特征标记的值。Object
getProperty(String name)
查找属性的值。void
parse(String systemId)
从系统标识符(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)
设置属性的值。
-
-
-
方法详细信息
-
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)
-
-