-
- All Known Subinterfaces:
-
CatalogResolver
,EntityResolver2
- 所有已知实现类:
-
DefaultHandler
,DefaultHandler2
,HandlerBase
,XMLFilterImpl
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或查找目录中的替换(可能使用公共标识符)。
- 从以下版本开始:
- 1.4,SAX 1.0
- 另请参见:
-
XMLReader.setEntityResolver(org.xml.sax.EntityResolver)
,InputSource
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 InputSource
resolveEntity(String publicId, String systemId)
允许应用程序解析外部实体。
-
-
-
方法详细信息
-
resolveEntity
InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
允许应用程序解析外部实体。在打开除顶级文档实体之外的任何外部实体之前,解析器将调用此方法。 此类实体包括DTD内引用的外部DTD子集和外部参数实体(在任一情况下,仅在解析器读取外部参数实体时),以及在文档元素内引用的外部通用实体(如果解析器读取外部通用实体)。 应用程序可以请求解析器定位实体本身,它使用备用URI,或者它使用应用程序提供的数据(作为字符或字节输入流)。
应用程序编写者可以使用此方法将外部系统标识符重定向到安全和/或本地URI,在目录中查找公共标识符,或从数据库或其他输入源(包括,例如,对话框)中读取实体。 XML和SAX都没有指定使用公共或系统ID来解析资源的首选策略。 但是,SAX指定如何解释此方法返回的任何InputSource,如果没有返回,则系统ID将作为URL解除引用。
如果系统标识符是URL,则SAX解析器必须在将其报告给应用程序之前将其完全解析。
- 参数
-
publicId
- 要引用的外部实体的公共标识符,如果未提供,则为null。 -
systemId
- 正在引用的外部实体的系统标识符。 - 结果
- 描述新输入源的InputSource对象,或null,以请求解析器打开与系统标识符的常规URI连接。
- 异常
-
SAXException
- 任何SAX异常,可能包含另一个异常。 -
IOException
- 特定于Java的IO异常,可能是为InputSource创建新的InputStream或Reader的结果。 - 另请参见:
-
InputSource
-
-