public interface EntityResolver
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.
如果SAX应用程序需要为外部实体实现定制处理,则必须实现该接口,并使用setEntityResolver
方法向SAX驱动程序注册一个实例。
然后,XML读取器将允许应用程序在包含它们之前拦截任何外部实体(包括外部DTD子集和外部参数实体(如果有的话))。
许多SAX应用程序不需要实现此接口,但是对于从数据库或其他专门的输入源构建XML文档的应用程序,或者使用URL以外的URI类型的应用程序,这将非常有用。
以下解析器将为应用程序提供具有系统标识符“http://www.myhost.com/today”的实体的特殊字符流:
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
public class MyResolver implements EntityResolver {
public InputSource resolveEntity (String publicId, String systemId)
{
if (systemId.equals("http://www.myhost.com/today")) {
// return a special input source
MyReader reader = new MyReader();
return new InputSource(reader);
} else {
// use the default behaviour
return null;
}
}
}
该应用程序还可以使用此接口将系统标识符重定向到本地URI或查找目录中的替换(可能通过使用公共标识符)。
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)
, InputSource
Modifier and Type | Method and Description |
---|---|
InputSource |
resolveEntity(String publicId, String systemId)
允许应用程序解析外部实体。
|
InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
解析器将在打开除顶层文档实体之外的任何外部实体时调用此方法。 这样的实体包括DTD内部引用的外部DTD子集和外部参数实体(在这两种情况下,只有在解析器读取外部参数实体时)以及在文档元素中引用的外部通用实体(如果解析器读取外部一般实体)。 应用程序可以请求解析器定位实体本身,使用替代URI,或者使用应用程序提供的数据(作为字符或字节输入流)。
应用程序编写者可以使用此方法将外部系统标识符重定向到安全和/或本地URI,查找目录中的公共标识符,或从数据库或其他输入源(包括例如对话框)读取实体, 。 XML和SAX都不指定使用公共或系统ID来解决资源的首选策略。 但是,SAX指定如何解释此方法返回的任何InputSource,如果没有返回任何InputSource,则系统ID将被解除引用为URL。
如果系统标识符是URL,则SAX解析器必须在将其报告给应用程序之前完全解析。
publicId
- 被引用的外部实体的公共标识符,如果没有提供,则为null。
systemId
- 被引用的外部实体的系统标识符。
SAXException
- 任何SAX异常,可能包括另一个异常。
IOException
- Java特定的IO异常,可能是为InputSource创建一个新的InputStream或Reader的结果。
InputSource